-
Content Count
145 -
Joined
-
Last visited
Content Type
Profiles
Member Map
Forums
Blogs
Gallery
Calendar
Store
Everything posted by vol
-
Please tell me about a value at $e-f (BASTOP) on your system and I build the code for it.
-
Thank you but drac030 told about the different locations, $346-$347. Your code uses $347-$348.
-
any Plus4 C264 programmers on this forum?
vol replied to hloberg's topic in Commodore 8-bit Computers
Hi My first home computer was the Commodore +4. I am even a person who wrote the first emulator for it. So I have many stories to tell about this computer. People often treated the Commodore series 264 rather wrongly. It was quite a successful series, some ppl estimate that there were about 2 million units produced. Some sources reduce this number twice. In some countries and especially in Germany and Hungary it was a quite popular home computer. This result cannot help but surprise because the Plus4 got very poor ads in the USA. Those ads still affect ppl judgement about this machine. However the ads were rather so bad because this series was Jack Tramiel's computers. He announced them only several weeks before he left Commodore. He wanted a killer-computer. The low-end model the C116 should have price below $50 and the middle model the C264 - below $80. If he had succeeded these computers could have purged 8-bit market. Maybe the ZX Spectrum, Atari 800, MSX, Tandy Color, and even Apple II could have been purged like the TI-99/4A was purged before. However he left Commodore and a war started between him and his former company. Commodore owner Irving Gould made a lot to make Jack reputation weaker. Stopping the expected success of the Commodore 264 was a part of means of the war. Commodore stopped selling the C116 and so it is really a rare computer now. They changed the middle level C264, they added poor quality ROM productivity software (spreadsheet, text editor, data base, and diagram builder) to it and increased its price about three or even four times. They cancelled the top model C364 and invented the most mass produced C16 which used the C64 case. The C16 and C116 had only 16 KB of RAM and a lot of software was written fitting this limit. The production of the Commodore 264 were lasting only two years in the 1984-85. The Commodore 264 has almost the same graphics as the C64 but without sprites. However graphics of the C264 has several advantages over the C64: it uses 121 colors and it can be programmed very flexible. For example, it became possible to expand screen up to 336x254 raster https://www.youtube.com/watch?v=BViU4PRMl6E It also became possible to use interlaced graphics which is quite good for pictures. I dare to give several links to example of the plus4 graphics https://www.youtube.com/watch?v=g4sWBcjr--k http://plus4world.powweb.com/software/VDC_Challenge http://plus4world.powweb.com/software/LOTR_Hobbit_Art There is a projects which uses the plus4 for streaming an external video. The audio capabilities of the plus4 generally is not very impressive but it is capable to play digital samples quite good. Some demos for the plus4 are real masterpieces, for example https://www.youtube.com/watch?v=SnDX0reRdeM or https://www.youtube.com/watch?v=975LSPRauVY The Plus4 CPU uses a tricky way to increase its speed, it can double its frequency whenever it is possible. So this increases its frequency from inferior 0.88 MHz to acceptable 1.11 MHz (screen on) or even 1.7 MHz (screen off). The Plus4 Basic is quite good it has powerful commands for graphics, disk drives, structural programming, audio, etc. It is also integrated with ML monitor which allow cheap and easy ML program development. I wrote my first ML programs using this way, for example http://plus4world.powweb.com/software/Life_V1_01 The Plus4 Basic is a bit slow, it is even slower than the C64 Basic. It is because the Plus4 Basic uses RAM/ROM swithing very oftem. BTW for this reason the C128 Basic is even more slower! The Plus4 PAL has an ability to be turned in super turbo mode which switches CPU to incredible 2.2 MHz and this makes it one of the fastest 8-bit computers. However it is quite likely that nobody knew about this mode in the 80s. The Plus4 has quite many good games, for example, https://www.youtube.com/watch?v=pEU2CXGiTBk - it is for 16 KB RAM! Indeed the absence of hardware sprites makes its game graphics often less smooth than graphics of the C64 or Atari 800. However total number of games is thousands. I can point on one quite new game - https://www.youtube.com/watch?v=q4Z9NmmRNmg For the C264 was developed a special fast disk drive the C1551. It was possible to run GEOS from it. However GEOS for the Plus4 misses some important pieces of software. The Plus4 can also use RS-232 at 19200 bps. It is possible to attach a Centronics printer directly to it. Indeed if somebody has some specific question about the plus4 I can try to answer it. Sorry maybe I have been too wordy. -
Thank you for the clarification. IMHO Rybags's information has not been completely definitive. So these 9 cycles explain the results... It is quite possible that the DMA refresh doesn't steal cycles on the C64 at all.
-
Thank you very much. I have started this thread because I expected a bit higher results for the Atari 800. Maybe it is because of the emulator I used? The port for the C64 is less optimized than for the Atari 800 now. The C64 port doesn't use a custom interrupt handler. I think we must use only the third test if we want to compare raw CPU speeds, for the current results the C64/Atari800 ratio is 1:1.63 which is still definitely less than expected 1.75 Does anybody know how much time spends Atari 800 for its RAM regeneration? I don't know this number for the C64 but for the Plus4 it is 5 cycles each raster line. There is also some system service on vector $224 in the Atari. I have also to emphasize that code for the all 6502 based systems are the same.
-
Indeed just follow the initial link. You have options: to load full pack for all platforms or just go to github. All links are at the bottom of the page. BTW I have just updated the table, I used all optimizations offered. So now the Atari 800 port is more optimized that almost version for any other port because the custom interrupt handler is implemented only for the Plus4 and Atari 800. Sorry I was reluctant to make a portable call to OUTCHAR, maybe next time. Anyway thank you very much!
-
Thank you very much again. It works! However custom interrupt routine makes code only 0.2% faster. So total gain for the Atari 800 is about 2.2%. So I may think that the Atari 800 spends more cycles on DRAM refreshing and other activities which cannot be disabled.
-
Thank you very much. SEI helps, it makes results about 2% better. However is there a way to read consistently the timer value at 18-20? Is there a way to disable NMI during this read? Sorry I failed with VBL redirection I use the next code sei lda $222 pha lda $223 pha lda #<tiroutine sta $222 lda #>tiroutine sta $223 ... pla sta $223 pla sta $222 cli rts tiroutine inc 20 bne tiexit inc 19 bne tiexit inc 18 tiexit rti The code fails on tiroutine. It seems I miss some Atari specific magic which should end NMI. Would anybody like to help with this matter?
-
Thank you. I have checked carefully book MAPPING THE ATARI but I couldn't find a common vector to OUTCHAR. I found a lot of information about interrupts on the Atari but I need just a vector address which I can redirect and use just to update timer value at 18-20. However it seems that this can work only when the screen is off, isn't it? So it can be rather complex code if we need to show digits on the screen and have minimal overhead for v-blank interrupts.
-
Thank you but the benchmark runs in screen blank mode which doesn't have bad lines at all. So we have to take into account only DRAM refreshing and it is longer for the Atari which can explain why the +4 is a bit faster.
-
I have a little benchmark project for various platforms. I have just added results for the Atari 800XL. These results are a bit surprising. The Atari 800 NTSC uses the 6502 at 1.79 MHz, as does the Commodore Plus4 NTSC. However the results for the Plus4 is about 10% faster. Maybe there is a way to speed up the Atari 800XL? Indeed I have disabled ANTIC by POKE559,0. The Plus4 code uses a custom interrupt handler, when it is working this code just increase the timer value and does nothing else. Is it possible to do the same thing on the Atari? What vector should I redirect to my custom handler? I have only superficial knowledge about the Atari system details. So any help will be greatly appreciated. I know that the efficient CPU frequency in the +4 NTSC is actually about 1.71 MHz (not 1.79) because of DRAM refreshing which steals cycles. But I don't know the exact number for the Atari's efficient CPU frequency. BTW I know that the Atari vertical refresh rate is 59.92 Hz on the NTSC system but I am not shore that this rate for the PAL system is exactly equal to 50 Hz. Is it? It is a bit surprising that the size of a BAS-file is greater than the size of the corresponding LST-file (Basic in text format). I have found out that the OUTCHAR routine has different addresses in the Atari 800 and XL. Is there a way to make a portable code which can work on both Ataris?
-
Word "BAD" is printed if Basic has more than 256 bytes free memory. It means that we can relocate the binary code lower and get more digits of the pi. It is good that the program has enough memory for BEEPs insertion, the original version has no enough room for any addition. Thank you very much for your results - you can see the whole picture now - here. Thank you for the idea with [email protected] Maybe I will use it with v3 of my π-calculator. BTW a man who earlier helped me with his Tandy-100 used just COM-port connection, he didn't have TS-DOS.
-
Would you like to type a formula which can correct a result from peeking addresses 18-20? I use only ROM-Basics for my tests. It is interesting that Altirra Basic is about 160% faster for this Mandelbrot than the standard Basic!
-
Thank you very much again. I use VirtualT emu. I have got CHANGE.BA - BTW thank you for the link to this very good library. I have tried to run it but I got a failure. Look at screenshots. HIMEM-FRE(0) should work fine because it leaves 256 bytes of memory dedicated for text strings. A man helped with running PI.BA on his Tandy-100 about a year ago. However later, he replaced the 8085 with the Z80 in his machine. This change has made his Tandy-100 unsuitable for my tests. The POKEs should work fine too. They just preserves the value of F-variable. It is necessary because CLEAR deletes all variables. I have rebuilt the program so the binary part is started at $9200 now. I got this number analyzing your screenshots. I almost sure that this must fix the problem. I have attached a new arhive. All sources are available at https://github.com/litwr2/rosetta-pi-spigot/tree/master/tandy-100 I have also prepared detailed instructions: 1. Put CALCPI.CO into the RAM-disk 2. CLEAR0,HIMEM-FRE(0) 3. LOADM"CALCPI 4. CALL37376 -- this must produce 100 digits of the pi number, if it is ok then it is possible to do the next steps 5. Reset, remove all files from RAM-disk 6. Put CAPINT.CO and PINT.BA into the RAM-disk (`pint.ba' maybe used instead of PINT.BA, `pint.ba' is in ASCII) 7. LOAD"PINT":RUN -- or just start with PINT.BA from the menu 8. Get a timing for 100 digits (it is interesting to run the program several times for 100 digits to get the timings difference) 9. Get a timing for 1000 digits 10. Get a timing for 3000 digits (a screenshot would be good!) 11. Reset, remove all files from RAM-disk 12. (Optional) Put CALCPI.CO and PI.BA into the RAM-disk (`pi.ba' maybe used instead of PINT.BA, `pi.ba' is in ASCII) 13. (Optional) Start PI.BA 14. (Optional) Get a timing for 100 digits 15. (Optional) Get a timing for 1000 digits All optional steps can be skipped. They can only help with result verification. If the ML program collides with the Basic program the latter should print "ERR". If I moved the ML-code too far and this reduces space for digits the program after its first run must print "BAD". BTW do you know a way do not print a space after a number? I would like to print "77)" and I can't! I always get "77 )" I use PRINT 77")". IMHO PRINT USING can't help too. I can only hope that there should be a special trick to do this. Thank you. pi-tandy-100-at9200.zip
-
Thank you very much. Sorry it is almost impossible for me to make such a Basic-program which should be able to relocate itself. CAPINT.CO assumes that it is placed at $8d00 address. Would you like to inform me about the start address of the RAM-disk on your system? I can change this address then and make a program suitable for your extended Tandy 100. I can't understand why you have mentioned 33,707 ($83ab) address. First bytes of CAPINT.CO are $00 $8d. It seems that it is just placed at the first available RAM-disk location because $8d00 is occupied. BTW for 100 digits, the program runs about a second. For 4 or 8 digits, it runs almost instantly.
-
Would anyone like to help me to get data about the Tandy 100/102 hardware? VirtualT emulator is not very accurate and I need information about the Tandy 100/102 exact timings. Please run the attached program three times, for 100, 1000, and 3000 digits. It can take about 40 minutes for 3000 digits. Program PINT.BA prints timings in the end. This Basic program loads ML-code (capint.co) and runs it. Please send me those printed three numbers. Thank you very much in advance. tandy100-time.zip
-
Does Altirra have Full throttle button? They have missed this option in the man-page. And it is rather useless: what to do with a computer which always runs at more than 1000% speed? We need an option to toggle fast/normal mode.
-
Thanks for help! I could run it! However I had to set proper margins and fight with timer. IMHO it is a large miss that Atari Basic doesn't have support for the timer. I also can't use Ctrl-C and Ctrl-V. I have added and changed the next lines: 166 POKE 82,0 : POKE 83,39 : GRAPHICS0 : REM PROPER MARGINS 290 Q0 = PEEK(20): Q1 = PEEK(19): Q2 = PEEK(18) 505 T0 = PEEK(20): T1 = PEEK(19): T2 = PEEK(18) 510 PRINT ((T2 - Q2)*65536 + (T1 - Q1)*256 + (T0 - Q0)) / 50 : REM 60 FOR NTSC Indeed that timer calculation needs the interrupts disabled to be always correct. It is a bit surprising that there is no Basic syntax highlight for posted code. I have only one more question: is it possible to turn Atari 800 emu into fast (full throttle) mode? EDIT. I can google information about Altirra Basic.
-
Hi I am a 6502 enthusiast but I used mostly Commodores. I had some experience with the Atari but it was long ago. Now I am trying to learn the Atari again. There is an interesting project - http://forum.6502.org/viewtopic.php?f=1&t=6323 - it draws Mandelbrot using ASCII chars. Would anybody like to help me to run it on the Atari? I use Atari 800 emulator. How to convert Basic text to a format which may be accepted by the emulator? 100 rem a basic, ascii mandelbrot 110 rem 120 rem this implementation copyright (c) 2019, gordon henderson 130 rem 140 rem permission to use/abuse anywhere for any purpose granted, but 150 rem it comes with no warranty whatsoever. good luck! 160 rem 170 c$ = ".,'~=+:;[/<&?oxOX# " : rem 'pallet' lightest to darkest... 180 so = 1 : rem set to 0 if your mid$() indexes from 0. 190 mi = len(c$) 200 mx = 4 210 ls = -2.0 220 tp = 1.25 230 xs = 2.5 240 ys = -2.5 250 w = 38 260 h = 21 270 sx = xs / w 280 sy = ys / h 290 q = time 300 for y = 0 to h 310 cy = y * sy + tp 320 for x = 0 to w 330 cx = x * sx + ls 340 zx = 0 350 zy = 0 360 cc = so 370 x2 = zx * zx 380 y2 = zy * zy 390 if cc > mi then goto 460 400 if (x2 + y2) > mx then goto 460 410 t = x2 - y2 + cx 420 zy = 2 * zx * zy + cy 430 zx = t 440 cc = cc + 1 450 goto 370 460 print mid$(c$, cc - so, 1); 470 next 480 print 490 next 500 print 510 print (time - q) / 60 520 end What to do next? Thank you.
