DRAWING THE LINE (PART 3)   4 comments

DRAWING THE LINE (Part 3)

C64Oct18LIST
Part of my latest program listing

Now it’s time for the next part of this series exposing just how difficult it is to draw lines in Commodore BASIC V2 on the Commodore 64 graphics screen! I have actually drawn a line across the C64 screen, but it took me 29 years to solve the problem! This series will continue, but there will be other posts made about various subjects inbetween the posts in the series “DRAWING THE LINE”. In this instalment, I’ll be extending, as well as tidying up, the line drawing program from last time. I felt I needed to write out in full everything I’d done the way I’d developed it POKE by POKE, instead of using FOR…NEXT loops or READ and DATA statements. I’m writing this sentence a few hours after receiving my Commodore 128 from eBay, although I started this article a few days before that and didn’t finish it til weeks after receiving the C128. I have no way to SAVE any programs at time of writing, but a Commodore 1530 C2N cassette data recorder is on its way to me. My opponent TMR tried to claim this wouldn’t work, but the C128 manuals say otherwise. I plan to buy a floppy drive emulator ASAP. Of course, drawing the line I’m doing in this series can be achieved quite easily in Commodore BASIC V7 on the Commodore 128 as follows.

10 REM DRAW A LINE FROM TOP LEFT TO BOTTOM RIGHT

20 GRAPHIC 1,1

30 DRAW 1,0,0 TO 319,199

No more than the lines above are needed, but I added the two following lines to wait a few seconds, then return to a text screen

40 SLEEP 4

50 GRAPHIC 0

In the original program I adapted from the “Commodore 64 Programmer’s Reference Guide”, the background colour was cyan and the drawing colour was black. The screen background colour can be set to cyan and colour 1 to black with this line

25 COLOR 0,4:COLOR 1,1:SCNCLR 1

As the DRAW command in line 30 starts with the number 1, this means it will draw in colour source 1. You can RENUMBER the program if you wish. All this without a PEEK or POKE in sight! I’ll try to keep mentions of the Commodore 128 to a minimum in this post, but that computer will be covered in some posts scheduled for the very near future.

Last time, when I finally cracked the problem of drawing a line in Commodore BASIC V2, I found it hard to believe what I’d done! I was left with a sense of total defeat in 1984-1985, wondering how some people could actually program the Commodore 64, while I had failed miserably. This has affected my confidence ever since then. I tried to get a refund from the lying little shit of a shopkeeper, whose last words to me about using the synthesizer chip, before I left the shop with the Commodore 64 were “It’s EASY! You just use PEEK and POKE commands”. Later on, when I went back to ask for a refund, he said “You’re JOKING!” and I was verbally abused by him and his assistant. He even had the cheek to say that he didn’t sell computers any more (he sold various electronic goods), but obviously this was irrelevant, because when I bought the C64 from him there was no sign saying he was going to stop selling computers and he didn’t tell me this either. My Dad was totally defeatist and didn’t even bother coming to the shop with me to help fix the mess he’d got me into. I think we may have saved £20-£40 by buying from that shop, but the misery it caused me was beyond belief. Of course, it was Jack Tramiel who set both of us up for this, but my Dad was quite gullible and liked to think he knew it all. His preference for the Commodore 64 was based on the name Commodore BUSINESS Machines instead of Atari’s games background, learning word processing (before we’d heard of replacement Spectrum keyboards), and “It’s 64K!”, although it turned out that the Sinclair Spectrum 48K had more RAM free to BASIC. After my success last time, I’ve started feeling that I could achieve anything. There’s this course http://www.c64scene.com/c64/?page_id=701 about BASIC V2 which doesn’t even cover hires graphics!

I’m coming back to this and other problems after later experience programming or even just attempting to program the Amstrad CPC, MSX, Amiga, and Atari 8 bit computers. I think this proves that the Commodore 64 isn’t for beginners, but requires previous knowledge of computing on other machines. I’m sure that PET fanatics loved it! At this stage I’d like to thank Amstrad PLC and Locomotive Software for the BASIC on the Amstrad CPC, Acorn Computer for BBC BASIC, Bill Gates and Microsoft for MSX BASIC and AmigaBASIC, Kay Nishi and the MSX Consortium for creating MSX computers, as well as Atari computers (Warner Bros era), Shepherdson Microsystems for Atari BASIC, and last but not least Jay Miner for helping to design the original Atari 400 and 800 computers AND the Amiga computer. I wouldn’t have been able to get back to this problem and make any progress on it with the antique, crippled Commodore BASIC V2 on the Commodore 64 if it hadn’t been for these people and others I may have forgotten to mention helping me to understand more about computers!

My opponent TMR started programming on the less complicated Commodore VIC-20, which also has Commodore BASIC V2, but no hires graphics and limited sound. I also suspect he understands quadratic equations, whatever THEY are! I’m artistic and creative, but I hate maths. This means I approach this problem from a completely different angle to TMR and his mates! David Simons, programmer of Simons’ BASIC started on a PET and also had a VIC-20 before moving on to the Commodore 64. Paul Roper, author of the book “Machine Code Games Routines for the Commodore 64” said he was programming in 6502 Assembly Language long before the Commodore 64 came out, and mentioned the Acorn Atom. This is a very user friendly 6502 based computer, which is the predecessor to the BBC Micro. Jim Butterfield wrote or co wrote various books about programming the Commodore 64 in 6502 Assembly Language. I’m currently reading his book “Machine Language for Commodore Machines” as printed on the pages, or “Machine Language for the Commodore 64 and other Commodore Computers” as it’s titled on the cover. This book lists programs which make use of Commodore “Kernal” OS routines which are included on the PET, VIC-20 and Commodore 64. He was an Editor of Compute magazine in the USA and it turns out he was a VERY early computer user who started programming on a company Collins C8401 mainframe computer in 1963!!!! Obviously this was 14 years before even the PET was released. He may have built homebrew computers more primitive than the PET. He had spent some time programming the PET before the Commodore 64 came out. As for me, I was thrown in at the deep end with the Commodore 64! It would probably have been better to start off on a Sinclair ZX81. Commodore KNEW that most of their customers were first time computer buyers, as Gail Wellington of Commodore UK Ltd mentions in this video just after 9 minutes in http://www.youtube.com/watch?v=2-kI0urN9tI , so in that case they knew that they’d had no experience of using earlier Commodore computers to prepare them for the Commodore 64.

I later read in Amstrad CPC magazines and books that the Amstrad CPC had lots of useful ROM based routines, and I even managed to write some programs in Z80 Assembly Language to use some of these. Unfortunately, although the Commodore 64 has various routines in ROM, which are listed in the Commodore 64 Programmer’s Reference Guide, I think these have mainly been copied from the Commodore PET and VIC-20. I think this is the reason I’ve never heard any mention of a SYS call to enter the hires or lores graphics mode and clear the screen. Perhaps two POKEs and PEEKS, as well as an AND and an OR may do it. The PET and VIC-20 had NO bitmapped graphics screens, only text screens. I remember reading various Commodore 64 manuals by Commodore and third party books, then thinking “WTF is all this?! Why can’t I just type a few commands for a program to do some amazing graphic art, like on the BBC Micro or Acorn Electron?” I got a 5.25 inch/13.34cm disk, formatted it on a BBC Micro, then typed in and saved various short BBC BASIC graphics demo programs. Some of my favourites were “Persian” a well known program which produces a woven carpet design, and “Nightmare”, which produces various shapes and discordant notes. I think this was the start of the demo scene, or perhaps it started with Atari dealer demo disks before that. I doubt if it would be possible to recreate “Persian” in Commodore BASIC V2 at all, even at a resolution of 160×200 with 16 colours, instead of 320×256 on the BBC Micro with 4 colours. “Nightmare” included various filled shapes, probably made up of filled triangles, done with a BBC BASIC command PLOT 69. The famous “Rotating Squares” program, as used in classic Doctor Who on the TARDIS console screen to represent the time vortex used logical colour switching, to create an effect like a flashing neon sign. Logical colour switching means that although your colours are numbered 0-15, each numbered colour can be ANY actual colour available in your palette, so by changing the actual colours of these numbered colours, you can produce animation. The BBC Micro used the 6845 video chip. I was able to recreate this effect on an Amstrad CPC, using the knowledge gained from the BASIC conversion course in “MSX User” magazine, because it used the same 6845 graphics chip and Amstrad’s Locomotive BASIC also had this colour switching facility. I don’t think, although I’m not sure, this is possible with the VIC-II chip, because although the Commodore 64 has colours numbered 0-15, these colours are fixed at least in Commodore BASIC V2. Looking at the Commodore BASIC V7 graphics commands with their colour “sources” parameters, I’m beginning to think that option may exist. Perhaps this effect could be simulated if a fast enough routine could be developed. Unfortunately, this would probably need to be in Machine Code, especially as the Commodore 64 is much slower than the Atari 8 bit and the BBC Micro Model B.

To sum up the techniques of plotting points and drawing lines in Commodore BASIC V2, here we go. All computer graphics screens are bitmapped, meaning that the data for each dot or pixel is held by a particular bit, which may be short for binary digit, or just the smallest amount of RAM which can’t be subdivided any further, possibly from when Spanish coins called “Pieces of Eight” (i.e. 8 Reales) were cut into 8 bits to make small change. RAM stands for Random Access Memory, actually meaning Read/Write Memory, because RWM would be hard to pronounce.

Different computers have different ways of bitmapping their graphics screens, like different street layouts in towns or cities. The screen RAM could be arranged to start on the top line, going all the way horizontally across the screen, before continuing on the next line down, then the following line, etc. Instead of this, the screen could be arranged in horizontal lines, each one 8 lines lower than the previous line, creating a Venetian blind effect when loading a screen, as on the Sinclair Spectrum, copied for the Amstrad CPC to make games conversions easier. While loading from cassette, the Commodore 64 blanks the screen, but I’m not sure about loading from its S-L-O-W disk drives, such as the 1541. If you could see a Commodore 64 graphics screen loading slowly, then it should load in a character cell by character cell order, from left to right, filling each horizontal line in each square before moving onto the next square!

Now back to my really messy program from last time…

5 BASE=2*4096:POKE 53272,PEEK(53272) OR 8:REM PUT BITMAP AT 8192

10 POKE 53265,PEEK(53265) OR 32:REM ENTER BITMAP MODE

20 FOR I=BASE TO BASE+7999:POKE I,0:NEXT I:REM CLEAR BITMAP

30 FOR C=0 TO 15

40 FOR I=1024 TO 2023:POKE I,C:NEXT C

50 POKE 53280,C

60 POKE 8192,128:POKE 8193,64:POKE 8194,32:POKE 8195,16:POKE 8196,8:POKE 8197,4

70 POKE 8198,2:POKE 8199,1:POKE 8200,128:POKE 8201,64:POKE 8202,32:POKE 8203,16

75 POKE 8204,8:POKE 8205,4:POKE 8206,2:POKE 8207,1

80 POKE 8520,128:POKE 8521,64:POKE 8522,32:POKE 8523.16:POKE 8524,8:POKE 8525,4

85 POKE 8526,2:POKE 8527,1

90 POKE 8848,128:POKE 8849,64:POKE 8850,32:POKE8851,16:POKE9952,8:POKE 8853,4

95 POKE 8854,2:POKE 8855,1:POKE 9176,128:POKE 9177,64:POKE 9178,32:POKE 9179,16

96 POKE 9180,8:POKE 9181,4:POKE 9182,2:POKE 9183,1:POKE 9504,128:POKE 9505,64

97 POKE 9506,32:POKE 9507,16:POKE 9508,8:POKE 9509,4:POKE 9510,2:POKE 9511,1

98 POKE 9832,128:POKE 9833,64:POKE 9834,32:POKE 9835,16:POKE 9836,8:POKE 9837,4

99 POKE 9838,2:POKE 9839,1

100 POKE 10160,128:POKE 10161,64:POKE 10162,32:POKE 10163,16:POKE 10164,8

110 POKE 10165,4:POKE 10166,2:POKE 10167,1

1000 NEXT C

1010 GOTO 30

1020 GOTO 50

Continuing in the same vein, here’s what we do. We need to pass through a total of 25 character cells in our screen. The end of the screen RAM which starts at 8192 is 7999 bytes higher up. As 8192+7999=16191, we know not to POKE to any addresses higher than that. Continuing to add 328 bytes for the beginning of each new character cell, we get the following start locations – 10488, 10816, 11144, 11472, 11800, 12128, 12456, 12784, 13112, 13440, 13768, 14096, 14424, 14752, 15080, 15408, 15736, 16064. The next number in this sequence would be 16392, but because this is higher than the end of our screen RAM at 16191, we know our list of starting positions is now complete! To refresh your memory, here are all the starting positions from the beginning of screen RAM 8192, 8520, 8848, 9176, 9504, 9832, 10160. This gives us a total of 25 addresses in our screen RAM, which are each the top line of a character cell. These could either be placed in lines of DATA statements, or just calculated by adding 328 in FOR…NEXT loops. As for an algorithm or equation, that would be more complicated, so I won’t attempt that at least for the moment. Apart from this I’m an ARTIST, not a MATHEMATICIAN!!!!

I think I should renumber the lines and insert some lines with the following commands somewhere into the program,

REM READ BIT PATTERN TO POKE
FOR NUM=1 TO 8
READ PT
POKE BASE,PT
NEXT NUM
DATA 128,64,32,16,8,4,2,1

BASE=8192:GOSUB [line number]
BASE=BASE+328
IF BASE>16191 THEN END

So, here goes! (don’t type this in)

10 BASE=2*4096:POKE 53272,PEEK(53272) OR 8:REM PUT BITMAP AT 8192

20 POKE 53265,PEEK(53265) OR 32:REM ENTER BITMAP MODE

30 FOR I=BASE TO BASE+7999:POKE I,0:NEXT I:REM CLEAR BITMAP

40 REM FOR C=0 TO 15

50 FOR I=1024 TO 2023:POKE I,C:NEXT C

60 REM POKE 53280,C

70 REM READ BIT PATTERN TO POKE

80 FOR NUM=1 TO 8

90 READ PT

100 POKE BASE,PT

110 NEXT NUM

120 DATA 128,64,32,16,8,4,2,1

130 BASE=8192:GOSUB XXXX

140 BASE=BASE+328

150 IF BASE>16191 THEN END

160 REM POKE 8192,128:POKE 8193,64:POKE 8194,32:POKE 8195,16:POKE 8196,8:POKE 8197,4

170 REM POKE 8198,2:POKE 8199,1:POKE 8200,128:POKE 8201,64:POKE 8202,32:POKE 8203,16

180 REM POKE 8204,8:POKE 8205,4:POKE 8206,2:POKE 8207,1

190 REM POKE 8520,128:POKE 8521,64:POKE 8522,32:POKE 8523.16:POKE 8524,8:POKE 8525,4

200 REM POKE 8526,2:POKE 8527,1

210 REM POKE 8848,128:POKE 8849,64:POKE 8850,32:POKE8851,16:POKE9952,8:POKE 8853,4

220 REM POKE 8854,2:POKE 8855,1:POKE 9176,128:POKE 9177,64:POKE 9178,32:POKE 9179,16

230 REM POKE 9180,8:POKE 9181,4:POKE 9182,2:POKE 9183,1:POKE 9504,128:POKE 9505,64

240 REM POKE 9506,32:POKE 9507,16:POKE 9508,8:POKE 9509,4:POKE 9510,2:POKE 9511,1

250 REM POKE 9832,128:POKE 9833,64:POKE 9834,32:POKE 9835,16:POKE 9836,8:POKE 9837,4

260 REM POKE 9838,2:POKE 9839,1

270 REM POKE 10160,128:POKE 10161,64:POKE 10162,32:POKE 10163,16:POKE 10164,8

280 REM POKE 10165,4:POKE 10166,2:POKE 10167,1

1000 REM NEXT C

1010 REM GOTO 40

1020 REM GOTO 60

As you can see from the various lines beginning with REM statements, a lot of these lines can be deleted. Unfortunately, while editing this program to make a shorter version with FOR…NEXT loops DATA statements, etc I managed to get an error. This was just like the original program from Your 64 magazine Issue No. 1, which plotted a single dot in the middle of the screen, which could be turned off by pressing a key, then turned on again by pressing a key again. This program only opened and cleared a graphics screen before stopping with an error message. Unfortunately, when you get a error message in a graphics program in Commodore BASIC V2 on the C64 you can’t read it! This is because the C64 prints the error message as coloured squares on the graphics screen! I think that any non Commodore computer would print a readable message, helping you to debug the program. As for that program published in 1984, I had no idea what was wrong with it, I don’t think any correction was ever published and I’ve only just managed to debug it, by adding a right hand bracket to the last line. At the time I was strictly following advice to type in exactly what was listed. I’ve even managed to take the program further, by plotting lots of random pixels and in various colours. Of course, a Sinclair Spectrum or an Atari would even have prevented me from entering the line with the error. As for the program I’ve been developing here, I got the same kind of unreadable message made up of coloured blocks, I worked out that the memory location to POKE was 53265, but there was no easy way back to the text screen which also preserved the error message. Even typing in a line from the Commodore 64 Programmer’s Reference Guide which clearly said that this sequence of commands will turn off bitmap mode just left me with a blank screen! Of course, this line also appeared as coloured squares, but I’m sure I typed what it said. Pressing RUN STOP and RESTORE resets the C64 and the C128 both in C64 and C128 modes, and the error message appears for a fraction of a second, but it’s not for long enough to read it. Of course, there’s no command to enable a function key to print any commands, like in BBC BASIC, Commodore BASIC V7, Amstrad Locomotive BASIC, Microsoft Extended BASICs, or MSX BASIC.

This leaves us with the following program.

10 REM HIRES GRAPHICS MODE SETUP (320X200)

20 BASE=2*4096:POKE 53272,PEEK(53272) OR 8:REM PUT BITMAP AT 8192

30 CL=BASE:REM CURRENT CHARACTER CELL

40 POKE 53265,PEEK(53265) OR 32:REM ENTER BITMAP MODE

50 FOR B=BASE TO BASE+7999:POKE B,0:NEXT B:REM CLEAR BITMAP

60 C=2:REM SETBACKGROUND COLOUR

65 POKE 53280,1:REM SET BORDER COLOUR TO WHITE

70 FOR I=1024 TO 2023:POKE I,C:NEXT I:REM FILL SCREEN WITH NEW COLOUR

80 REM READ DOTS TO PLOT, BIT PATTERN TO POKE

90 FOR NUM=1 TO 8

100 READ PT

110 POKE CL,PT:REM CL AT START=BASE

115 CL=CL+1

120 NEXT NUM

125 RESTORE

130 CL=CL+320:REM INC CHARACTER CELL

140 IF CL>16191 THEN GOTO 200:REM CHECK FOR END OF SCREEN RAM

150 GOTO 90

190 REM LOOP

200 GOTO 200

210 RETURN

1000 DATA 128,64,32,16,8,4,2,1

C64DRAWLINEOct18
The output of this program

Unfortunately, although the program draws a line across the screen it doesn’t draw a line from the top left hand corner to the bottom right hand corner, but reaches the bottom of the screen somewhere to the left of the bottom right hand corner. I think this is because the screen has more columns than rows. At the moment, I don’t know how to edit the program to achieve the desired result and I don’t think I’ll live long enough to work that out anyway, so I think I’ll have to leave it.

Here’s some more stuff I’ve managed to work out from the “Commodore 64 Programmer’s Reference Guide”. I first read it in 1984, then bought another copy several years ago from eBay, eventually lost it, then recently re read parts of it online. I think learning Japanese may be easier. When drawing lines on a Commodore 64 graphics screen, you have a few choices of where to put this screen in RAM. One of these choices is at location 8192, but wherever it is, let’s call it BASE for the moment, while not forgetting that only the first two letters BA will be taken any notice of by the crappy Commodore BASIC V2. Perhaps you’d be better off calling it TL for Top Left, or SS for Screen Start. Unfortunately, although Commodore BASIC V7 has over 140 commands, it’s still limited to variable names with only the first 2 characters being significant!

To draw horizontal lines on the Commodore 64, here’s what you MAY be able to do.

1. Choose a RAM location between BASE and BASE+7999.
2. POKE that RAM location with 255.
3. Add 8 to the last RAM location which you’ve just POKEd
4. POKE this location with 255 as well
5. Repeat steps 3, 4, and 5

To draw vertical lines on the Commodore 64, here’s what you MAY be able to do.

1. Choose a RAM location between BASE and BASE+7999
2. POKE that RAM location and each subsequent location with one of the following numbers – 1,2,4,8,16,32,64,or 128. Once you choose a number to POKE, stick with the same number for each RAM location which you POKE until you finish drawing your line.
3. Add 1 to the last RAM location which you’ve just POKEd, until you’ve POKEd 8 pixels, then add 320 to the RAM location where you started
4. Repeat steps 2 and 3

TO PLOT RANDOM DOTS ON THE SCREEN TRY THIS…

1. Generate a random RAM location between BASE and BASE+7999, using the RND and INT commands.
2. Assign the random RAM location to a variable, then POKE that variable with the number 1,2,4,8,16,32,64,or 128, chosen at random
3. Repeat steps 1 and 2

You already know that the start of the hires graphics screen RAM can be placed at location 8192. There are a few other locations where it can be placed, but not all of them are available from BASIC and 8192 may be the only available location in BASIC, or without relocating BASIC. Due to the choice of locations, it’s best to assign the start of screen RAM to a variable such as BASE, BS TL, or SS. Whatever you decide to call it, you can calculate all the parts of the screen RAM from that starting address. I think this is called relative coordinates or relative addressing, instead of absolute coordinates or absolute addressing. To do this, carry out the following calculations.

Next character cell to the right, on first row=BASE+8, next=BASE+16, next=BASE+24, next=BASE+32, etc
Next character cell down, on second row=BASE+320, ON third row=BASE+640, on fourth row=BASE+960, etc

Now I’m taking a break from this series “Drawing The Line” to study Commodore BASIC V7 and enjoy my new/old Commodore 128. After this I could learn Japanese before returning to the more difficult task of BASIC V2 programming on the Commodore 64. With the C128 I plan to show people what the Commodore 64 SHOULD have been like, but how Commodore RUINED it! I didn’t manage to get one with a massive, old 5 ¼ inch disk drive, but these are really bulky, plus blank disks of that size are very hard to buy nowadays. I’ve also bought a Commodore 1530 C2N cassette data recorder on eBay. This is compatible with the C128, which CAN use a datasette or cassette data recorder from Commodore BASIC V7, not just from C64 mode with Commodore BASIC V2. This enables me to SAVE and LOAD various short Commodore BASIC V7 programs I’ve been writing. These programs all SAVE and LOAD quite quickly. I plan to buy a device soon which allows me to use SD cards to store floppy disk images. This is called an SD2IEC. I think it will also boot from CP/M disk image files. I’ve already got a similar device for the Atari 8 bit, but the plug and possibly some other parts make it incompatible. The cheapest versions of this are available from Poland. I’ve now also bought a Commodore 1541 II disk drive, which matches the C128 and C64C casing and looks quite like the 1571 disk drive! I bought one without a PSU, so it’s just sitting there for the moment while I wait for an original PSU to arrive from Germany. I’ve bought 10 blank disks from eBay UK. Modern replacement PSUs with the right output which may be laptop PSUs which have had their connectors cut off, then replaced with a 4 pin DIN plug are available from eBay but are all from the USA, so would take much longer to arrive here.

That’s all for now! Sayonara!

Advertisements

Posted October 18, 2013 by C64hater in Uncategorized

4 responses to “DRAWING THE LINE (PART 3)

Subscribe to comments with RSS.

  1. hello there and thank you for your info – I’ve certainly picked up anything new from right here.

    I did however expertise several technical issues using this web site, since I experienced to reload
    the site lots of times previous to I could get it to load properly.
    I had been wondering if your hosting is OK? Not that I’m complaining, but sluggish
    loading instances times will sometimes affect your placement in google and can damage your high-quality score if ads
    and marketing with Adwords. Well I am adding this RSS to my e-mail and could look out
    for a lot more of your respective intriguing content.
    Make sure you update this again soon.

    • Thanks for your comment! I’m not 100% what you said, though. Hier wird auch deutsch gesprochen. I plan to continue the series “Drawing The Line” soon, after I do some more articles about “The A-Z of Personal Computers”.

      I think what you meant to write was as follows…

      “Hello there and thank you for your info. I’ve certainly picked up some new information here.
      I did however experience several technical issues using this web site, since I had to reload
      the site lots of times so I could get it to load properly.
      I had been wondering if your hosting is OK? Not that I’m complaining, but sluggish
      loading times will sometimes affect your placement in Google and it can damage your score if there are ads
      and marketing with Adwords. Well, I’m adding this RSS to my e-mail and will look out
      for a lot more of your retrospective, intriguing content.
      Make sure you update this again soon”.

      I certainly will!/Werde ich auch tun!

  2. I will a generic line draw sample in c64 basic via a link so this site doesn’t modify the code: https://slack-files.com/T4LHYLK8C-F4KRFK89E-f9b31e7801

  3. Well, it seems that the code linked to in the last comment actually draws a line in Commodore BASIC V2 on the C64. It seems to use similar techniques to those I’ve already demonstrated.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: