######## ################## ###### ###### ##### ##### #### #### ## ##### #### #### #### #### #### ##### ##### ## ## #### ## ## ## ### ## #### ## ## ## ##### ######## ## ## ## ##### ## ## ## ## ## ##### ## ## ######## ## ## ## ### ## ## #### ## ## ##### #### #### #### #### ##### #### #### #### #### #### ###### ##### ## ###### ###### Issue #10 ################## June 30, 1995 ######## ------------------------------------------------------------------------------ Editor's Notes by Craig Taylor This is my last issue of Commodore Hacking (having finally gotten out the door, but I couldn't break tradition and get it out on time :-) ). I'm having to give it up because I've gradually lost interest in Commodore computers over the years and with the search for a job (anyone wanna hire a csc graduate?) and as I get older I seem to have less and less time. I'm gonna be handing the reigns of Commodore Hacking over to Jim Brain, who is a very active member of the Commodore Internet community. He will also be running a mailserver that will take the place of mine (Mine will become unavailable after July 1st and will send pointers to Jim Brain's mailserver). It's been interesting to watch the Commodore computers evolve, take off like a rocket and then have Commodore go into liquidation. Commodore computers have been and still are, (with some exceptions - 1541 head-banging comes to mind), technologically sound. For a "hacking" machine they're wonderful. My email address has changed to duck@nando.net. I periodically still check mail at duck@pembvax1.pembroke.edu but only every 2 weeks or so. I am still going to try to be in the Commodore community but time will govern my ability to do that. I'm going to miss editing this rag.... And here is Jim Brain: Mail Server Changes: With Issue 10, the address for the Commodore Hacking mail server has changed. The new address is brain@mail.msen.com The commands are the same as before. Not all of the files have been moved yet, so please email the administrator (Jim Brain, brain@mail.msen.com) if a file you need is not on the new site. Howdy: Howdy, my name is Jim Brain, and I will be taking over the position of editor for Commodore Hacking starting with Issue 11. Some of you may know me as the Commodore Trivia Contest administrator, the USENET newsgroup comp.sys.cbm FAQ Manitainer, or the keeper of a Commodore Information WWW Site at http://www.msen.com/~brain/cbmhome.html. Wherever you have heard of me from, or even if you haven't, I will state that I plan on handling Commodore Hacking in the following way. The next issue will possibly look different cosmetically, as I edit somewhat differently than Craig, but the content and basic layout will remain the same. The types of material will not change, and the structure for submitting articles will change only in the address to mail them to: brain@mail.msen.com. However, I do have a few changes in mind: 1) Try to stabilize the issue generation so that Commodore Hacking will become a quarterly publication. 2) Attempt a fully "HTML"ized version of the magazine, while still providing a text version. 3) Pursue the possibility of providing a printed version of these issues for those who have no online access to them. 4) Encourage User Groups and other CBM related organizations to carry this magazine for their members. So, again I say howdy. As always, Commodore Hacking will accept your articles at any time, so please help us keep this quality magazine running. If you have any questions or comments about the change in editorship, the possible changes, or other matters, please feel free to drop me a note. I look forward to hearing from you and publishing your articles. Jim Brain brain@mail.msen.com =========================================================================== Legal Mumbo-Jumbo Permission is granted to re-distribute this "net-magazine", in whole, freely for non-profit use. However, please contact individual authors for permission to publish or re-distribute articles separately. A charge of no greater than 5 US dollars or equivlent may be charged for library service / diskettte costs for this "net-magazine". ------------------------------------------------------------------------------- Please note that this issue and prior ones are available via anonymous FTP from ccnga.uwaterloo.ca (among others) under /pub/cbm/hacking.mag and via a mailserver which documentation can be obtained by sending mail to "brain@mail.msen.com" with a subject line of "mailserver" and the lines of "help" and "catalog" in the body of the message. ------------------------------------------------------------------------------- In This Issue: Commodore Trivia Trivia Edition #13-18 are in this article. As you may know, these questions form part of a contest in which the monthly winner gets a prize (Thanks to my various prize donators). The whole thing is mainly just for fun, so please enjoy. Try your hand at Commodore trivia!! BFLI - New graphics modes 2 FLI gave us more color to the screen, AFLI increased the horizontal resolution and color selection by using the hires mode. BFLI stands for 'Big FLI' and gives us 400 lines instead of the usual two hundred. AFLI and BFLI can be combined, but we are not going into that. Making stable raster routines (C64 and VIC-20) In this article, I document two methods of creating stable raster routines on Commodore computers. The principles apply for most 8-bit computers, not only Commodores, but raster effects are very rarely seen on other computers. A Differant Perspective - Part III. Yes!!! It's yet another article on 3D graphics! Even if you haven't been following this series, you can use this program. This time around we will write a completely general polygon plotter -- if you can type basic data statements, you can create a three-dimensional object out of polygons and rotate and project it to your heart's content. For the more technically inclined we will look at optimizations to the line routine, EOR-buffer filling, and more! Yow! Second SID Chip Installation This article describes how to add a second sid chip for use in SidPlayer and other programs. As always, be extra careful when making modifications to your computer. Solving Large Systems of Linear Equations on a C64 Without Memory OK, now that I have your attention, I lied. You can't solve dense linear systems of equations by direct methods without using memory to store the problem data. However, I'll come back to this memory free assertion later. The main purpose of this article is to rescue a usefull numerical algorithm, "Quartersolve", and also to provide a brief look at the COMAL programming language and BLAS routines. The World of IRC - A New Life for the C64/128 I've heard people talking about IRC. What is it? Why is it useful to me as a Commodore user? Bill "Coolhand" Lueck explains the hows and whys in this article. SwiftLink-232 Application Notes (version 1.0b) This information is made available from a paper document published by CMD, with CMD's permission. Design and Implementation of a Simple/Efficient Upload/Download Protocol This article details how to implement a custom upload/download protocol that is faster than most of the ones common to the C64/128 computers. Design and Implementation of a 'Real' Operating System for the 128: Part II There has been a slight change in plans. I originally intended this article to give the design of a theoretical distributed multitasking microkernel operating systemfor the C128. I have decided to go a different route: to take out the distributed component for now and implement a real multitasking microkernel OS for a single machine and extend the system to be distributed later. The implementation so far is, of course, only in the prototype stage and the application for it is only a demo. Part III of this series will extend this demo system into, perhaps, a usable distributed operating system. ======================================================================== Trivia by Jim Brain (brain@mail.msen.com) Well, summer is upon the Brain household, and things are moving at a fast clip at the house. However, the trivia still keeps coming. I appreciate all the people who contribute to the trivia and all the people who take part in the monthly contest. I have collected Trivia Edition #13-18 in this article. As you may know, these questions form part of a contest in which the monthly winner gets a prize (Thanks to my various prize donators). The whole thing is mainly just for fun, so please enjoy. As the summer months start up, news on the trivia includes: 1) I now have access to some more orphan machines (C65, C116), so expect some trivia questions on those models. 2) The new home now has a number of machines set up, so testing answers to the trivia is even easier. I am still trying to get the old PET machines in house, but the others are here. 3) The Commodore World Wide Web Pages (http://www.msen.com/~brain/cbmhome.html) that I maintain and place the trivia on caught the eye of USA Today and the Pheonix Gazette. I was interviewed for both articles. Look in the June 20th edition of USA Today for the segment, and possibly a picture of Jim Brain and the machines he uses to create the trivia. As always, I welcome any questions (with answers), and encourage people to enter their responses to the trivia, now at #18. Jim. The following article contains the answers to the December edition of trivia ($0C0 - $0CF), the questions and answers for January ($0D0 - $0DF), February ($0E0 - $0EF), March ($0F0 - $0FF), April ($100 - $10F), and the questions for the May edition ($110 - $11F). Enjoy them! Here are the answers to Commodore Trivia Edition #13 for December, 1994 Q $0C0) The early 1541 drives used a mechanism developed by ______. Name the company. A $0C0) Alps. Q $0C1) On later models, Commodore subsequently changed manufacturers for the 1541 drive mechanism. Name the new manufacturer. A $0C1) Newtronics. Q $0C2) What is the most obvious difference(s). (Only one difference is necessary) A $0C2) Alps: push-type latch, round LED. Newtronics: lever-type latch, rectangular LED. Q $0C3) On Commodore BASIC V2.0, what answer does the following give: PRINT (SQR(9)=3) A $0C3) 0. According to Commodore BASIC, the answer should bby -1, which is the BASIC value of TRUE. However, the above equation is NOT true. Doing PRINT SQR(9) yields 3, but doing PRINT (SQR(9)-3) yields 9.31322575E-10 (C64). This anomaly can be attributed to roundoff errors in the floating point math routines in Commodore BASIC. Q $0C4) In Commodore BASIC (Any version) what does B equal after the following runs: C=0:B=C=0 A $0C4) B = -1. The second statement is the one to look at. The second equals sign is treated as a comparison, while the first is treated as a assignment. B gets set to the outcome of the comparison, which is TRUE (-1). Q $0C5) The first PET cassette decks were actually _______ brand cassette players, modified for the PET computers. Name the comapny. A $0C5) Sanyo. Specifically, Model M1540A. What a model number! Q $0C6) In Commodore BASIC (Any version), what happens if the following program is run: 10 J=0 20 IF J=0 GO TO 40 30 PRINT "J<>0" 40 PRINT "J=0" A $0C6) On BASIC 2.0 or greater: ?SYNTAX ERROR IN 20 READY. On BASIC 1.0: (found on the PET 2001 series) J=0 READY. BASIC 1.0 totally ignored spaces, so line 20 became "IFJ=0GOTO40". That statement would be correctly parsed, sicne it contains the "GOTO" keyword. However, on BASIC 2.0 or greater, spaces weren't ignored so completely, and the "TO" in "GO TO" would be tokenized separately, so some code was added to BASIC to check to "GO". As the code that accepts GOTO as a special case for THEN after an IF statement wasn't patched this way, the above fails, because GO is not a valid keyword after IF. The statement SHOULD work correctly, but does not because of this failure to fix the IF command parsing. On BASIC 2.0 or greater, substituting the following line for line 20 will cause the program to work: 20 IF J=0 THEN GO TO 40 Q $0C7) In question $068, we learned how Jack Tramiel first happened upon the name "COMMODORE". According to the story, though, in what country was he in when he first saw it? A $0C7) Germany. Q $0C8) On the Commodore user port connector, how many edge contacts are there? A $0C8) 24. Two rows of 12 contacts each. Q $0C9) On most Commodore computers, a logical BASIC screen line can contain up to 80 characters. On what Commodore computer(s) is this not true? A $0C9) According to Commodore documentation, a _physical_ screen line is defined as one screen line of characters. A _logical_ screen line is defined as how many _physical_ lines can be chained together to create a valid BASIC program line. With that in mind, most Commodore computers chose a _logical_ screen line that was a multiple of the screen width. This works fine for 40 and 80 column screens, but what do we do with the VIC-20, with its 22 column screen. Solution: make the _logical_ line length equal to 4 _physical_ lines, or 88 columns. When the Commdore 128 was introduced, the number rose to 160 characters, which is 4 _physical_ lines in 40 column mode, or 2 _physical_ lines in 80 column mode. However, you can only take advantage of this in 128 mode. 64 mode is limited to 80 characters. To add to all this confusion, a valid BASIC program line (in memory) can actually be 255 (tokenized) characters long, but creating such a long line cannot be done from the built-in editor in direct mode. The AmigaBASIC, available on the Amiga, also does not have the 80 column line limit. However, that BASIC is SOOO much different that I am not surprised. The older CBM BASICs, on the other hand, were all derivatives of the original Level 1 BASIC for the PET. Q $0CA) If a file is saved to a Commodore Disk Drive with the following characters: chr$(65);chr$(160);chr$(66), what will the directory entry look like? A $0CA) The filename will show up as "A"B, with the 'B' showing up to the right of the '"' mark. This could be used to make program loading easier. A file that showed up as "filename",8,1 could be loaded by simply hitting shift-run/stop on that line. Q $0CB) What is the maximum length (in characters) of a CBM datasette filename? A $0CB) References I have on hand say 128 characters. However, the actual code on the 8032 and the C64 acts as though 187 characters can actually be sent (tape buffer-5 control bytes = 192-5=187). The references that claim 128 characters are Nick Hampshire's _The VIC Revealed_ and _The PET Revealed_. ANyone care to lay this one to rest? Q $0CC) How many keys are on a stock Commodore 64 keyboard? A $0CC) 66 keys. This is the same number as found on the VIC-20 and the Commodore 16. Q $0CD) Commodore BASIC uses keyword "tokens" to save program space. Token 129 becomes "FOR". What two tokens expand to include a left parenthesis as well as a BASIC keyword? A $0CD) TAB( (163) and SPC( (166). Q $0CE) There are 6 wires in the Commodore serial bus. Name the 6 wires. A $0CE) 1) Serial /SRQIN 2) GND 3) Serial ATN IN/OUT 4) Serial CLK IN/OUT 5) Serial DATA IN/OUT 6) /RESET Q $0CF) On the Commodore datasette connector, how many logical connections are there? A $0CF) 6. Opposing pins on the connector are hooked together electrically. Here are the answers to Commodore Trivia Edition #14 for January, 1995 Q $0D0) How many keys were there on the "original" PET and what was special about them? A $0D0) the original PET had 73 calculator-style keys that were laid out in a rectangular matrix, not typewriter-style. Q $0D1) How do you produce the "hidden" message(s) on the Commodore 128? A $0D1) SYS 32800,123,45,6. The screen will clear, and the software and hardware developers on the 128 project will be named. The exact text is as follows: [RVS] Brought to you by... Software: Fred Bowen Terry Ryan Von Ertwine Herdware: Bil Herd Dave Haynie Frank Palaia [RVS]Link arms,don't make them. Q $0D2) How much memory did the "original" PET show on bootup? A $0D2) The "original" PET came in two configurations, 4K and 8K, so: The PET 2001-4 had 3071 bytes. The PET 2001-8 had 7167 bytes. Q $0D3) We all know the "reboot" sys for the 64 is sys 64738, but who knows the same sys location to reboot the CBM 8032? A $0D3) sys 64790 Q $0D4) Which computer(s) beeped at bootup? (May be more than one, but only one required) A $0D4) I know some of these are corect, but the sheer size of the list prevents me from checking them ALL out. FAT 40XX series 80XX series PC-10 (I suspect a number of IBM clones did, and these things have no consistent naming convention across country boundaries.) PC-20 Amiga 1000 SP9000 (SuperPET) Q $0D5) How much memory did the CBM 8032 show on bootup? A $0D5) 31743 bytes. Q $0D6) Certain Commodore computers provided emtpy EPROM sockets on the motherboard. Give me the number of empty sockets on the following machines: a) CBM 30XX. b) CBM 8XXX. c) CBM C128. d) Plus/4. A $0D6) a) 3 sockets. b) 2 sockets. c) 1 socket. d) 1 socket. Q $0D7) In Germany, the CBM 8032 came with a 4kB EPROM for the EXXX area, while the US version only had a 2kB EPROM. Why? A $0D7) The German version had additional keybaord drivers for umlaut characters and dead keys. Q $0D8) Who published the first PET memory map in the "PET Gazette"? A $0D8) None other than the infamous Jim Butterfield. Q $0D9) Which is faster to move the sursor on a PET/CBM or C64: SYS or PRINT? A $0D9) PRINT is faster, since the sys approach must process the pokes before the sys, which are very slow. Q $0DA) On the Amiga 1000, where are the signatures of the first Amiga developers located? A $0DA) Inside the top case of the Amiga (1000). There is an interesting footnote to this question. It seems that at least some original Amiga machines were labeled as Amiga (with nu number). Then, at some later point, the number was added. In addition, Commodore produced some Amiga 1000 machines without the signatures, but most had the telltale handwriting on the inside of the case. Q $0DB) On the 6502, what does the accumulator contain after the following is executed: lda #$aa sed adc #01 A $0DB) Assume carry was clear. If so, then $11 is the correct answer. Q $0DC) What is the model number of the US NTSC VIC-II chip? A $0DC) Its first number was 6567, and that is the number most people know it by, but Commodore produced a VIC-II using a new manufacturing process that was numbered the 8562. Q $0DD) What is the European PAL VIC-II chip's model number? (Not sure if that's its rightful term, but I hope you understand). A $0DD) Same here. The part number 6569 is the most remembered number, but an 8565 will work as well. Q $0DE) Assume you have two computers, one with each of the above chips inside. Which chip draws more pixels on the screen per second? A $0DE) Note, for the purposes of the calculation I am performing, "pixels" refers to picture elements that can be adddress and modified using normal VIC modes, so there are 320*200 "pixels" on both the PAL and NTSC screens. (I probably should have stated this, but it is too late now.) Also, the screen refresh rates used in the calculations are those defined by the respective television standards (60Hz U.S., 50Hz European), even though the actual frequencies are off by a small percentage. (for example, the actual 50Hz refresh rate on European VIC-II chips was calculates as 50.124567Hz by Andreas Boose) So, the PAL draws 320*200*50 pixels per second = 3200000 pixels/s NTSC draws 320*200*60 pixels per second = 3840000 pixles/s Now, some people thought I meant the whole screen, not just the display area provided by the VIC-II chip. Well, I am not sure exactly you calculate pixels on a screen, since the numbers could vary from display to display, but if we measure in scanlines: PAL = 312 scanlines * 50 = 15600 scanlines/s NTSC = 262 scanlines * 60 = 15720 scanlines/s The NTSC machines wins both ways. Q $0DF) In Commodore BASIC, which statement executes faster: a = 2--2 or a = 2+2 A $0DF) b is the correct answer, and there are a couple of reasons why: 1) 2--2 takes longer to parse in the BASIC interpreter. 2) Commodore BASIC subtracts by complementing the sign of the second number and adding. This incurs extra time. There are even more subtle ones, but I leave them as an exercise for the reader. Send me your reason why. Here are the answers to Commodore Trivia Edition #15 for February, 1995 Q $0E0) What is the difference(s) between the Newtronics 1541 and the 1541C? (only one difference is needed) A $0E0) (George Page, a noted authority on CBM Drives, indicated that Commodore made this a tough question to answer.) By the time the 1541C was introduced, Commodore threw a number of drives together and called them 1541Cs. The theoretical 1541C exhibited the following features: No head banging, and other problems fixed by modified ROMs. Case color matches C64C and C128 computers. Q $0E1) What happens when you type 35072121 in direct mode on the C64 and hit return? A $0E1) Simple answer: Most likely, the screen clears and the word READY. is printed at screen top. This is the behavior seen when pressing RUN-STOP/RESTORE. Alternately, nothing could happen, or the computer could lock up. Involved answer: There is a bug in BASIC 2.0. Easily fixed, but destined to live life immortal. (long) The bug is in the PETSCII number to binary conversion routine at $a69b (LINGET). The routine basically reads in a character from the line, multiplies a partial result by 10 and adds the new character to the partial result. Here is a code snippet: a96a rts a96b ldx #$00 ; zero out partial result a96d stx $14 a96f stx $15 a971 bcs $a96a ; not a number, return a973 sbc #$2f ; PETSCII to binary a975 sta $07 a977 lda $15 ; get hi byte or partial result a979 sta $22 a97b cmp #$19 ; partial > 6399 a97d bcs $a953 ; yes, goto error a97f lda $14 ; load lo byte of result a981 asl ; lo*2 a982 rol $22 ; hi*2 + c a984 asl ; lo*2 a985 rol $22 ; hi*2 + c a987 adc $14 ; complete lo*5 a989 sta $14 a98b lda $22 a98d adc $15 ; complete hi*5 a98f sta $15 a991 asl $14 ; lo*2 complete lo*10 a993 rol $15 ; hi*2 complete hi*10 a995 lda $14 a997 adc $07 ; add new char a999 sta $14 a99b bcc $a99f ; did lo overflow? a99d inc $15 ; yes, inc hi a99f jsr $0073 ; get next char a9a2 jmp $a971 ; go through it again. The problem is at $a97d. when the partial result is greater than 6399, (if partial > 6399, then new partial result will be over 63999) the routine needs to get to $af08 to print an error, but can't due to branch restrictions. However, a branch that will get there is in the preceding function, which handles the ON GOTO/GOSUB keywords ($a94b, ONGOTO). So, the BASIC writers just branched to the code in ONGOTO; specifically $a953: a94b jsr $b79e a94e pha a94f cmp #$8d ; is the keyword GOSUB ($8d) a951 beq $a957 ; yes a953 cmp #$89 ; is the keyword GOTO ($89) a955 bne $a8e8 ; no, print SYNTAX ERROR. a957 ... ; handle ON GOTO/GOSUB This code is checking to make sure the ON (var) is followed with a GOTO or GOSUB keyword. The LINGET error handler branches to $a953, which compares .A (which holds hi byte of partial result) to $89. Normally, this fails, and the normal SYNTAX ERROR code is reached through the branch to $a8e8. However, for partial results of the form $89XX, the check succeeds, and BASIC tries to execute an ON GOTO/GOSUB call. By the way, it is no coincidence that this error occurs on 35072121, since one of the partial results is $8900 (hi byte is $89). In fact, 350721 will achieve the same result. If the check succeeds, the code limps along until $a96a: a969 pla ; complement to $a94e a96a rts ; return But we never executed $a94e, the push, so the stack is now messed up. Since the stack held $9e, $79, $a5 before the PLA, (The stack could hold other values, but I always saw these) the RTS gets address $a579 to return to, which usually holds a BRK opcode. The break handler is invoked, and the screen clears with the READY. at the top. Now, the BASIC 2.0 authors were justified in reusing the error handler code in ONGOTO for LINGET, but they calculated the branch offset wrong, according to my tests. If you have the LINGET error handler branch to $a955, all these troubles disappear. You can verify this procedure with the following BASIC program on a 64: 10 for t=57344 to 65535:poke t,peek(t):next 20 for t=40960 to 49151:poke t,peek(t):next 30 poke 43390, 214 40 poke 1, peek(1) and 254 Just to be complete, this error occurs when a 6 digit or greater line number is entered and the first 6 digits indicate a number in the range 35072-35327 ($8900-$89ff). Also, it appears the error occurs on the VIC-20, but I didn't completely verify it. It would be interesting to note if the error is found on all version of CBM BASIC. Whew, what a mouthful. Q $0E2) If a SID chip is producing a "sawtooth waveform", does the waveform look like: a) "/|/|/|/|" or b) "|\|\|\|\" ? A $0E2) a is the correct answer. Q $0E3) On BASIC 2.0, what special precaution(s) must one take when working with relative files? (only one is needed) A $0E3) Because BASIC 2.0 doesn't handle positioning in relative files quite right, one must position the relative file pointer before AND AFTER a read or write to a relative file. Q $0E4) What incompatibility existed between C128 Rev. 0 ROMS and the REU? A $0E4) OK, I admit it. I placed this answer and its discussion somewhere in my store of information, and it must have fallen behind the cabinet, because I cannot find it. I will post an answer to this as soon as I can find it, but the answers really must go out, as they have been held up long enough. Q $0E5) What can trigger an NMI interrupt? (count all sources on one chip as one) A $0E5) The following sources can trigger an NMI interrupt: 1) The expansion port. 2) CIA #2. 3) The RESTORE key. Q $0E6) What can trigger an IRQ interrupt? (count all sources on one chip as one) A $0E6) The following sources can trigger an IRQ interrupt: 1) The VIC-II chip. 2) CIA #1. 3) The expansion port. Q $0E7) Where is the ROM in a 1541 located in the 64K memory map? A $0E7) The ROM is located from $C000 to $FFFF, yet the ROM code does not begin until $C100. Q $0E8) Which VIA on the 1541 is hooked to the read/write head? A $0E8) VIA #2, located in memory from $1C00 to $1C0E. Q $0E9) In the Commodore DOS, what bit in the file type byte denotes a "locked" file? A $0E9) bit 6. Q $0EA) If files are "locked" under Commodore DOS, under what condition(s) may the file be changed? A $0EA) Depending on the file, the following operations can be done on a locked file: 1) Rename will change file name, although not contents of file. 2) Random access can be used to alter file. 3) Formatting the disk will alter the file. (duh!) 4) Save-with-replace (@0:) will replace file and unlock it. 5) Opening file in append mode will allow it to be changed, and unlock it. 6) Opening a relative file and adding or changing a record will succeed and unlock file. Q $0EB) How big can a program file be on a 1541 or similar? A $0EB) The file can be as large as a sequential file, since both are stored in the same way: 168656 bytes. However, since a program contains its load address as bytes 0 and 1, the largest program size is 168654 bytes. Q $0EC) Under BASIC 2.0, how does one open a random access file on a disk drive? A $0EC) Random access (or direct access) files are a misnomer. What you really doing is opening the disk for reading and writing. You need two open command to access a random file: (assume drive 8) open 15,8,15 and open 1,8,4,"#1" will open a random access file using buffer 1. open 1,8,4,"#" will open a random access file using the first available buffer Now, by using B-R, B-W, B-A or their replacements, you can write data to sectors on the disk. Note that Random access files are different from relative files. Q $0ED) A file that has a '*' immediately before the filetype is called a _________ file. A $0ED) a splat file. This is its correct term, believe it or not. Q $0EE) We know the 1541 and similar drives have 5 internal buffer areas, but how many does an 8050 drive have? A $0EE) Since the 8050 has twice the on-board RAM (4kB), it has 16 buffers, but only 13 are available. (All CBM drives use one buffer for zero-page memory, one for stack memory, and one for temporary variables.) Q $0EF) On a "save-with-replace", where is the location of the first track and sector of the new copy of the program saved in the directory entry for the old copy? A $0EF) The new first track is stored at location 26, and the new first sector is stored at location 27. These values are copied to their correct locations after the save is completed. Here are the answers to Commodore Trivia Edition #16 for March, 1995 Q $0F0) What size matrix of pixels comprises a character on a PET 2001 computer? A $0F0) The matrix was 8 by 8. Q $0F1) How many bytes did the opening screen on a CBM 4016 show as available for use by BASIC? A $0F1) 15359 bytes free. Q $0F2) The character set that produces uppercase letters on unshifted keys is the ________________ character set. A $0F2) "standard mode". Q $0F3) The character set that produces lowercase letters on unshifted keys is the ________________ character set. A $0F3) "alternate mode" Q $0F4) To get to the set mentioned in $F2, what character code would be printed to the screen? A $0F4) chr$(142) Q $0F5) What character code would one print to the screen to invoke the chararacter set in $F3? A $0F5) chr$(14) Q $0F6) If one does LIST 60-100, will line 100 get "listed"? A $0F6) Yes. The above translates as: LIST 60 through to and including 100. Q $0F7) The abbreviation for the BASIC 4.0 command "COLLECT" is ________. A $0F7) coL. "C" "O" "SHIFT-L". For those who are interested, the COLLECT command is analogous to the VALIDATE operation. Q $0F8) When you use a subscripted variable in BASIC, how many elements are created by default if no DIM statement is issued? A $0F8) 11 elements. A(0) - A(10). Almost everyone who has ever programmed in Commodore BASIC has seen the "BAD SUBSCRIPT" error when they try to use the 12th element in a un-DIMensioned array. Q $0F9) How large is the keyboard buffer in CBM computers? A $0F9) 10 bytes. Since this area could be POKEd to, many boot programs would poke characters into this buffer to simulate keypresses. Q $0FA) On the Commodore 1581, how large is a physical sector in bytes? A $0FA) A physical sector is 512 bytes in length. Internally, the 1581 creates 2 256 "logical" sectors in a physical sector, to maintain compatibility with older Commodore drives. Q $0FB) You'll find BASIC 3.5 on the _____________ line of CBM computers. A $0FB) The X64 series. That includes the Commodore 16, the Commodore 116, and the Commodore Plus/4. Q $0FC) On the Commodore 1351 mouse, what registers in the Commodore computer would the X and Y proportional information be read from? A $0FC) Even though you are looking for digital information (how far the mouse has traveled since the last movement in a particular axis), the information is read from the "paddle" or potentiometer (POT) registers. On the C64, the POT registers are part of the SID chip, and are at 54297 ($D419) for POTX, and 54298 ($D41A) for POTY. Q $0FD) What is the maximum size of a sequential file on a 1581 drive? A $0FD) 802640 bytes. Q $0FE) What flaw exists in the early Commodore 1670 modems? A $0FE) When the 1670 modem was first introduced, it powered up in auto- answer mode, which means it would answer incoming calls after the phong rang. You could turn this feature off through software control, but if the power was reset, the modem would answer the phone. So many people complained to Commodore that CBM revised the 1670 to include an extra DIP switch that turned this feature off. Q $0FF) What is the model number of the first modem for the VIC and C64? A $0FF) The 1600 manual dial/manual answer 0-300 bps modem. The author owns one, and used it for many years. To operate, you must use a phone with a detachable handset cord. You dialed the number on the phone, waited for the answer, unplugged the handset, and plugged the cord into the 1600. A switch toggled between using originate or answer frequencies. The 1600 was manufactured by Anchor Automation for Commodore. (As an aside, this unit claimed 300 bps, but I never could get 300 to work well. Most of my telecommunications happened at 150 bps.) -------Commodore Trivia Edition #17 Questions and Answers (BEGIN)-------- Q $100) On the MOS Technology's KIM-1, how many keys were on the keypad? A $100) 23 keys. The keypad has room for 24, but one spot is taken by a switch that puts the system into single-step mode. Interestingly, some pictures have the switch on the upper left, some on the upper right. Q $101) The KIM-1 keypad had the common 0-9A-F keys on the keypad, but also had some special keys. Name them. A $101) GO (Go) Executes an instruction and displays the address of next, ST (Stop) Stops execution of program and return control to monitor, RS (Reset), AD (Address) Address entry mode, DA (Data) Data entry mode, PC (Program Counter) Displays and restores program counter to values in PCL and PCH, + (Increment) Increments the address without changing the entry mode. Q $102) The KIM-1 was a set of modules that could be plugged together to expand the system. Each module had a model number. What was the model number of the KIM-1 motherboard? A $102) The KIM-4. Q $103) On the 1525 line of printers, if you wanted to create the following graphic, what bytes would you send to the printer after turning on graphics mode? **** * * * * * * * * * * **** A $103) I guess I should have stipulated that this is a bitmap. ASCII just has a few limitations. Anyway, the correct bytes to send are: 255, 193, 193, 255. You got these by assigning each bit in a column a value, and adding 128 to the result for each column. Q $104) What is the horizontal resolution of the 1525 line of printers? A $104) Character resolution: 80 chars, or 10 chars/inch (cpi). Graphics resolution: 480 dots, or 60 dots/inch (dpi). Q $105) On Commodore drives, explain the difference between the B-R command and the U1 command. A $105) The two commands read in data from a disk sector. However, the U1 command always reads a full sector (255 bytes). The B-R command reads the number of bytes specified in the first byte of the sector. If the first byte is a 15, B-R will read 15 bytes from the sector. (From the 1581 manual) Q $106) On the Commodore 1541 drive, what does the U: command do? A $106) This command has been traditionally used to reset Commodore drives, including the CBM 1541. However, some early versions of the Drive DOS did not correctly handle this command. In these versions, the drive and computer failed to complete the command transaction successfully, and what looked like a hung machine resulted. Commodore later fixed this problem. If U: seems to not work on your drive, try U; instead. Q $107) What does the first routine in the 1541 drive ROM actually do? A $107) The function, called SETLDA and residing at $C100, turns on the drive active LED for the current drive. The routine loads the c