Jump to content

mnemo

Members
  • Posts

    41
  • Joined

  • Last visited

About mnemo

  • Birthday July 4

Profile Information

  • Location
    Germany
  • Currently Playing
    Horizon Forbidden West

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

mnemo's Achievements

Space Invader

Space Invader (2/9)

43

Reputation

  1. Yes, I began coding such a tool, but sadly haven't gotten much further. In my thread, linked above, the user @E474 linked to his own project, which might be the tool you meant: https://github.com/e474/ATRMaker
  2. The name was surely intended and is an acronym in German: "Atari-Maschinen-Programm-Eingabe-Listing" (translates literally to "Atari Machine Program Input Listing").
  3. Here's the disassembly of the three AMPEL V1.1 machine language routines. The disassembly was done with ATR Image Explorer. The three routines are loaded from the BASIC program in order to: $0600 (page 6), ML$ BASIC string, CIO$ BASIC string. ML$ is probably the data entering and checksum routine, CIO$ is a general purpose interface to CIO calls (appending data to the file). The code at $600 is called from the ML$ and CIO$ routines that reside anywhere in memory and need an absolute address for their sub routines. Entry points are $600, $609 and $61C. Since Frank Ostrowski is listed as the author in the AMPEL 1.1 article, this code is probably from him. ; file ampel_p6.bin is 57 bytes ; Disassembly of 0600 to 0636 0600 AD 25 E4 LDA $E425 0603 48 PHA 0604 AD 24 E4 LDA $E424 0607 48 PHA 0608 60 RTS 0609 48 PHA 060A 4A LSR A 060B 4A LSR A 060C 4A LSR A 060D 4A LSR A 060E 20 14 06 JSR $0614 0611 68 PLA 0612 29 0F AND #$0F 0614 09 30 ORA #$30 0616 C9 3A CMP #$3A 0618 90 02 BCC $061C 061A 69 06 ADC #$06 061C A8 TAY 061D AD 47 03 LDA $0347 ; ICPTH ... 0620 48 PHA 0621 AD 46 03 LDA $0346 ; ICPTL PUT BYTE ROUTINE ADDRESS - 1 0624 48 PHA 0625 98 TYA 0626 60 RTS ; Data 0727 to 0739 (19 bytes) ; Table of valid keyboard codes read from CH. ; Order is 0-9, A-F, Ctrl+S, DEL 0627 32 1F 1E 1A 18 1D 1B 33 35 0630 30 3F 15 12 3A 2A 38 BE 34 00 ; file ampel_ml.bin is 261 bytes ; Disassembly of 0700 to 0803 0700 A9 00 LDA #$00 0702 85 D5 STA $D5 ; FR0+1 0704 68 PLA 0705 C9 02 CMP #$02 0707 F0 10 BEQ $0719 0709 AA TAX 070A F0 05 BEQ $0711 070C 68 PLA 070D 68 PLA 070E CA DEX 070F D0 FB BNE $070C 0711 A9 03 LDA #$03 0713 2C A9 01 BIT $01A9 0716 85 D4 STA $D4 ; FR0 0718 60 RTS 0719 68 PLA 071A 85 D7 STA $D7 ; FR0+3 071C 68 PLA 071D 85 D6 STA $D6 ; FR0+2 071F 68 PLA 0720 85 D9 STA $D9 ; FR0+5 0722 68 PLA 0723 85 D8 STA $D8 ; FR0+4 0725 18 CLC 0726 65 D6 ADC $D6 ; FR0+2 0728 85 D6 STA $D6 ; FR0+2 072A A5 D9 LDA $D9 ; FR0+5 072C 65 D7 ADC $D7 ; FR0+3 072E 85 D7 STA $D7 ; FR0+3 0730 A9 9B LDA #$9B 0732 20 1C 06 JSR $061C 0735 A5 D9 LDA $D9 ; FR0+5 0737 20 09 06 JSR $0609 073A A5 D8 LDA $D8 ; FR0+4 073C 20 09 06 JSR $0609 073F A9 3A LDA #$3A 0741 20 1C 06 JSR $061C 0744 A9 00 LDA #$00 0746 85 DA STA $DA ; FRE 0748 AD FC 02 LDA $02FC ; CH GLOBAL VARIABLE FOR KEYBOARD 074B 29 BF AND #$BF 074D A2 11 LDX #$11 074F DD 27 06 CMP $0627,X 0752 F0 05 BEQ $0759 0754 CA DEX 0755 10 F8 BPL $074F 0757 30 EF BMI $0748 0759 86 DB STX $DB ; FRE+1 075B 8D FC 02 STA $02FC ; CH GLOBAL VARIABLE FOR KEYBOARD 075E 20 00 06 JSR $0600 0761 29 7F AND #$7F 0763 20 1C 06 JSR $061C 0766 A5 DB LDA $DB ; FRE+1 0768 C9 10 CMP #$10 076A F0 A8 BEQ $0714 076C 90 28 BCC $0796 076E A5 DA LDA $DA ; FRE 0770 F0 CD BEQ $073F 0772 4A LSR A 0773 B0 05 BCS $077A 0775 A9 7E LDA #$7E 0777 20 1C 06 JSR $061C 077A A0 04 LDY #$04 077C 46 DC LSR $DC ; FRE+2 077E 66 DD ROR $DD ; FRE+3 0780 66 DE ROR $DE ; FRE+4 0782 66 DF ROR $DF ; FRE+5 0784 66 E0 ROR $E0 ; FR1 0786 66 E1 ROR $E1 ; FR1+1 0788 66 E2 ROR $E2 ; FR1+2 078A 66 E3 ROR $E3 ; FR1+3 078C 66 E4 ROR $E4 ; FR1+4 078E 88 DEY 078F D0 EB BNE $077C 0791 C6 DA DEC $DA ; FRE 0793 B8 CLV 0794 50 B2 BVC $0748 0796 0A ASL A 0797 0A ASL A 0798 0A ASL A 0799 0A ASL A 079A A0 04 LDY #$04 079C 0A ASL A 079D 26 E4 ROL $E4 ; FR1+4 079F 26 E3 ROL $E3 ; FR1+3 07A1 26 E2 ROL $E2 ; FR1+2 07A3 26 E1 ROL $E1 ; FR1+1 07A5 26 E0 ROL $E0 ; FR1 07A7 26 DF ROL $DF ; FRE+5 07A9 26 DE ROL $DE ; FRE+4 07AB 26 DD ROL $DD ; FRE+3 07AD 26 DC ROL $DC ; FRE+2 07AF 88 DEY 07B0 D0 EA BNE $079C 07B2 E6 DA INC $DA ; FRE 07B4 A5 DA LDA $DA ; FRE 07B6 C9 12 CMP #$12 07B8 F0 13 BEQ $07CD 07BA C9 10 CMP #$10 07BC D0 04 BNE $07C2 07BE A9 3C LDA #$3C 07C0 D0 05 BNE $07C7 07C2 4A LSR A 07C3 B0 CE BCS $0793 07C5 A9 20 LDA #$20 07C7 20 1C 06 JSR $061C 07CA B8 CLV 07CB 50 C6 BVC $0793 07CD A5 D9 LDA $D9 ; FR0+5 07CF 0A ASL A 07D0 65 D8 ADC $D8 ; FR0+4 07D2 0A ASL A 07D3 65 DC ADC $DC ; FRE+2 07D5 0A ASL A 07D6 65 DD ADC $DD ; FRE+3 07D8 0A ASL A 07D9 65 DE ADC $DE ; FRE+4 07DB 0A ASL A 07DC 65 DF ADC $DF ; FRE+5 07DE 0A ASL A 07DF 65 E0 ADC $E0 ; FR1 07E1 0A ASL A 07E2 65 E1 ADC $E1 ; FR1+1 07E4 0A ASL A 07E5 65 E2 ADC $E2 ; FR1+2 07E7 0A ASL A 07E8 65 E3 ADC $E3 ; FR1+3 07EA C5 E4 CMP $E4 ; FR1+4 07EC D0 12 BNE $0800 07EE A9 3E LDA #$3E 07F0 20 1C 06 JSR $061C 07F3 A0 07 LDY #$07 07F5 B9 DC 00 LDA $00DC,Y ; FRE+2 07F8 91 D6 STA ($D6),Y ; FR0+2 07FA 88 DEY 07FB 10 F8 BPL $07F5 07FD A9 00 LDA #$00 07FF 2C A9 02 BIT $02A9 ; TABMAP+6 0802 85 D4 STA $D4 ; FR0 0804 60 RTS ; file ampel_cio.bin is 83 bytes ; Disassembly of 0700 to 0750 0700 68 PLA 0701 C9 04 CMP #$04 0703 D0 42 BNE $0747 0705 68 PLA 0706 68 PLA 0707 AA TAX 0708 68 PLA 0709 68 PLA 070A 85 D4 STA $D4 ; FR0 070C 68 PLA 070D 85 D6 STA $D6 ; FR0+2 070F 68 PLA 0710 85 D5 STA $D5 ; FR0+1 0712 68 PLA 0713 85 D8 STA $D8 ; FR0+4 0715 68 PLA 0716 85 D7 STA $D7 ; FR0+3 0718 A0 86 LDY #$86 071A 8A TXA 071B C9 08 CMP #$08 071D B0 21 BCS $0740 071F 0A ASL A 0720 0A ASL A 0721 0A ASL A 0722 0A ASL A 0723 AA TAX 0724 A5 D4 LDA $D4 ; FR0 0726 9D 42 03 STA $0342,X ; ICCOM COMMAND CODE 0729 A5 D5 LDA $D5 ; FR0+1 072B 9D 44 03 STA $0344,X ; ICBAL BUFFER ADDRESS 072E A5 D6 LDA $D6 ; FR0+2 0730 9D 45 03 STA $0345,X ; ICBAH ... 0733 A5 D7 LDA $D7 ; FR0+3 0735 9D 48 03 STA $0348,X ; ICBLL BUFFER LENGTH 0738 A5 D8 LDA $D8 ; FR0+4 073A 9D 49 03 STA $0349,X ; ICBLH ... 073D 20 56 E4 JSR $E456 ; CIOV CIO ROUTINE 0740 84 D4 STY $D4 ; FR0 0742 A9 00 LDA #$00 0744 85 D5 STA $D5 ; FR0+1 0746 60 RTS 0747 A0 0A LDY #$0A 0749 AA TAX 074A F0 F4 BEQ $0740 074C 68 PLA 074D 68 PLA 074E CA DEX 074F D0 FB BNE $074C 0751 F0 ED BEQ $0740
  4. I always wondered that myself. I don't think they ever published the full source code to AMPEL in Happy Computer, only the known "runtime" version. Should be easy to disassemble, though. EDIT: I found an article about AMPEL 2.0 in another issue of Happy Computer, which explains the checksum calculation. Original: "Das höherwertige Byte der Zeilennummer (die ersten beiden Zahlen) multipliziert der Computer mit zwei -und addiert darauf das niederwertige Byte der Zeilennummer. Dieses Ergebnis multipliziert er erneut mit zwei. Dann addiert er der Reihe nach die acht Datenbyte hinzu, wobei er wiederum nach jeder Addition das Ergebnis verdoppelt. Nur nach dem achten Datenbyte läßt er das Ergebnis unangetastet. Von dieser Summe verwendet er nur die letzten acht Bit (eine Zahl zwischen Null und 255), die schließlich die Prüfsumme bilden." My translation: "The higher-order byte of the line number (the first two digits) are multiplied by 2 and then the lower-order byte of the line number is added. This sum is again multiplied by 2. Then it adds the eight data bytes in order, doubling the result each time. Only after the eighth data byte the sum is left unchanged. Of this sum only the lower eight bit (a number between 0 and 255) is used which is the checksum." The author of AMPEL is Henrik Fisch, by the way, an editor at Happy Computer magazine at the time.
  5. The aforementioned scans of the interpreter and compiler articles were made by me more than 20 years ago. I cropped and aligned them as best I could and first uploaded them to my webpage as TIFF images and created the PDFs some years later. It makes me smile that they are still passed around. 🙂 Side note: The scans are from an "Atari Special Issue" of Happy Computer magazine (which I still have). The original published article of the interpreter appeared in Happy Computer issue 12/1985 (at newsstands in November 1985), which is available at archive.org (not my scan). Sadly, I don't have that issue anymore. According to that article, Frank received 2000 Deutsche Mark for the interpreter back then, which equates to about $680 at the exchange price of 1985.
  6. There is already a client for Atari 8-bit by Michael Goroll. Point your FujiNet here: tnfs.abbuc.social/members/michaG/FUJIAI07.COM
  7. Don't get your wallet ready just yet. From the comments on this video (which is also only speculating). RM-Team (the guys behind the RM 800XL got back to me via E-Mail. Here is the text: Hello, thank you for your interest in our RM 800XL. Design work is currently underway, and the finished product is likely to be available in 2024. We will keep you informed about the development on Twitter and in the future also on Facebook. Twitter account: https://twitter.com/rm_800xl Best regards, larek RM Team
  8. Received my Sophia 2 from @Simius today and it works like a charm in my 800XL. Thank you! Awesome picture!
  9. If I'm not mistaken there is some "breakout" board stuck into the C64, which would make sense since they don't have the same connector for cartridges, or do they? So there's probably some magic in that board and the AVG firmware detects if it's connected to an Atari or Commodore. The AVG GUI offers XEX and ATR files on the Atari, but CRT and PRG files on the C64. Checks out. Pretty awesome. Just did a quick search and the Atari has a 30 pin cartridge connector and the C64 a 44 pin expansion slot. Oh, wait. The "PBI" and "SIO" cables get connected to the AVG Cart - so there's more going on. The other end of those cables would be interesting to see.
  10. MINE didn't. 😛 We do?? Who wants that? No, really, I never see those at the supermarket.
  11. But it looks a bit like Avg of Borg.
  12. Thank you, TZJB. The problem with creating and mounting a new virtual ATR all the time was the initial spark to create this tool. There is no direct way to access the SD card from the N device yet, sadly. I wasn't aware. Maybe something can be done about that in the future.
  13. Hi, E474, I *knew* there must be some tool that does this. I'll have a look at yours when I have some time, thanks. 🙂 The link to Thom's thread contains SUPER valuable info, thanks for that, too. I see I have to do a lot more to read a few sectors if the tool intends to be really valuable. 🙂 EDIT: OK, so ATR Maker only allows D1 to D9 as destinations, that prohibits writing to a random device like N:, of course. Also, it crashes when you enter an eight character filename.
  14. Thanks for the response, there are some very helpful hints in there. I also think that it's better to rely on the system to provide HSIO. Retrying and comparing "stable" bytes sounds feasible, but maybe it's a bit out of scope for the tool. I can imagine that there are better tools for that.
  15. Hello! After rediscovering the Atari 8-bit and getting a FujiNet and now also an Avgcart, I looked for a tool to create an ATR file directly on the Atari and was quite surprised that I couldn't find one. Maybe I used the wrong search terms or whatever, but I came up empty. With all the newly available mass storage devices it's a logical step to directly create the disk image on the Atari instead of mounting an empty virtual image to copy the disk into that using a disk copier. So I decided to code a tool myself, also as an exercise to get back into Atari programming. After using Assembler and BASIC on my 800XL in the 80's I wanted to be a bit quicker and installed CC65. I finally got it to work as a proof of concept of sorts and now I wanted to ask if there is actually any interest in or need for such a tool. The current name is COPATR for COPy ATR, but maybe D(I)SK2ATR is a better name. Since the destination filename is editable, one can also use the N: handler of FujiNet or go even one further and use the FujiNet NOS (Network Operating System) to run the tool from the network and then write the image directly via the network to a file server. Next possible steps: - Generally improve the UI. - Correctly determine the disk density (it's currently hard-coded) or add menu options for that. - Handle read errors with retries. - Add option to skip bad sectors, filling the affected sector with "BAD!", for example, allowing to salvage at least parts of the data. - Implement the "File to Disk" function so you can directly write an image back to disk on the Atari. - Use extended memory to buffer more data. - Better use of memory to store empty sectors as flags and not all the zeroes. - Implement a file browser to select the file on the file device (might be too much code). - Add High-Speed SIO code? - Maybe re-code all of it in Assembler to bring down the program size (current XEX is 8225 bytes). Any thoughts? 🙂 Cheers, Thomas / mnemo
×
×
  • Create New...