Jump to content


  • Content Count

  • Joined

  • Last visited

  • Days Won


Alfred last won the day on September 30 2018

Alfred had the most liked content!

Community Reputation

524 Excellent

About Alfred

  • Rank
  • Birthday 05/25/1962

Profile Information

  • Gender
  • Location
    Elmwood, Ontario

Recent Profile Visitors

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

  1. Eh, what’s this? Code running in the A8 side of the emulator can talk to a part of the emulator that an external program can communicate with via an exposed TCP/IP port ? This documented anywhere or just in the Altirra source ?
  2. I have a pair of Action! Programs, AT2IBM and IBM2AT that I use to copy files. They support wildcards, but you have to have two drives.
  3. Yes, that’s true. However the expression processor returns $013030 as the value of the label. The PER processor balks because it’s expecting a 16 bit value, which isn’t. Now it’s occurred to me that it’s a bug, since what I should be doing is subtracting the target address from the current location counter to get the offset that is pushed on the stack. I’ve tried to be clever so that BRL, PER and PEA are all handled by the same subroutine, so the PER subtraction function should be yielding a 16 bit offset. My guess is the subroutine is catching the bank as $01 because that’s an error for PEA before the code gets around to doing the actual PER math. PER processing should split from PEA before the range check, do its range math and rejoin PEA to check if the final result is >64K. This is why I’m trying to run so many edge cases because everything the original codebase “knows is true” like all addresses are 16 bit or all immediate operates are 8 bit isn’t true in 65816 mode. I’ve had to fix a lot of things in Six Forks to get past the restrictions of the original codebase. I’d only rate the assembler as a good beta atm.
  4. That seems a bit misleading, as $DC is the indirect version. So yes, it is a long jump but it's not a direct jump, like JMP is. I think that table is incorrect. They broke out Long for $DC but say $5C is not long, which is dead wrong. $5C should be in that JML line because it's a Long jump, not just a jump to a new location like $4C is. IMO, anyway.
  5. I thought I made a mistake, but the Eyes & Lichty book shows both. $5C is the long jump, $DC is the long indirect, and I guess WDC allows both formats as a mnemonic. It just seems a bit jarring to see JMP $00B800 in the debugger but see JSL $00E456.
  6. A minor thing. In the debugger you show JSL for the JSL opcode, but it always shows JMP even when it's the JML opcode. Can you make it show JML ?
  7. Yes, you could probably do that. The compiler makes use of a few routines from the editor for reading source lines from either the buffer or a file, but pretty much all the rest of the editor could go. Ripping out the internal system library should be pretty easy, delete 4 lines of code and throw away the big internal tables. The compiler makes no assumptions about the machine, it ought to be usable on any 6502 platform. About the only dependencies I can think of are, you need a few zero page ranges, on the Atari I think it s$8X, $Cx and $Ax, and the compiler assumes that there is always a heap space following the binary. It's a pretty vanilla system.
  8. To what end ? Most of the editor could be removed, and I think the built-in library could also probably be removed but why ?
  9. Turns out it's the post to reply button on the thumbnail. Anyway, now that I have a working 65816 assembler I've started work on a couple of 65816 projects. First is a runtime library to allow Action! programs to be run in banks other than 0. The first version wasn't very good, so I'm redoing it. The other project is a native 65816 DOS. I actually started on this back in 2003 according to the source, although then it wasn't really a 65816 project. I decided then that while SpartaDos was great, hardware problems with the Black Box and other things meant corruption on the disk was rarely detected. So I devised a scheme not unlike DOS XE for sector links with maps like SpartaDos. The other objective was to support larger than 16MB partitions; the BB I believe can do 48MB. Puff thinks there's a reason why it can't do 64MB but he doesn't remember now what that reason is. A 6502 version will likely also get done because I really hate that my 1MB 800 is stuck with MyDOS. Yes, I know about SDX, but I never found the cartridges to be reliable and anyway I just prefer a disk-based DOS, so no point in lecturing me that I'm wasting my time. Eventually it will also handle SpartaDos and AtariDos formats.
  10. How do you add text after you upload a picture ? The editor doesn't seem to allow you to do that, you can't put the cursor below the pic box. There must be a way though, because Drac030 did it earlier in this thread.
  11. Still tinkering with Six Forks, but SFAX816 has reached the point where I think it's good enough to start using it on other projects. I've decided that cloning the WDC assembler can wait, that I can build the projects I want with what I have, it just means they need to be structured differently. All 65816 opcodes are supported in all modes. BRL/PER allow the target to be a virtual, the linker will catch if the target is too far away. If 24 bit code is used, the binary file header is $FBFA as I used in AlfAsm and Chuck used in his XASM for the Turbo-816. Mostly I've been running 65816 code through the assembler to verify it's correct but a few things have popped up that I hadn't thought of in advance. In the WDC assembler, any external reference to a label is treated as a long reference, unless you use a forced address mode operator. So something like: LDA MEMLO becomes LDA $00:02E7. This strikes me as wasteful of space, and means a lot of extra typing to keep putting ! in front as in LDA !MEMLO . I had forgotten about this issue until I was testing the PER instruction. Early tests showed it working but when I moved the binary origin to $01:3000 it failed. The assembler balked and said target out of range. PER of course only takes a 16 bit offset and the $01 bank address was causing the opcode processor to fail the expression because of that $01. This wasn't an issue in other tests where the target of PER was a virtual, because, based on its 6502 origin, Six Forks treats all external references as 16 bit addresses, unless you use an address operator or have specifically declared the external via .VIRT24 or .VIRT8. So, the same code works if the target is virtual but fails if the target is an absolute reference above bank 0. What to do ? I want to keep the short addressing because using longs everywhere just slows things down, and I'm not typing in all those ! characters. So I'm going to add a .IGN24O (Ignore 24 On) directive and what it will do is: If the operand is 24 bit and the desired result is 16 bit and there is no forced address operator, then ignore the bank address and treat the result as 16 bit. So LDA $01:02E7 still works because we can handle a 24 bit operand, but PER $01:3030 will also work. This way the same code should work in both cases. It might cause issues with other code, so I'll have to try it and see.
  12. You would save some bytes by moving everything from START up to but not including RESET to after PGEND. There is no reason for that code to remain resident. Instead of it ending with the BVC, you would terminate it with a RTS.
  13. It's mostly a matter of personal taste. I don't isolate labels so as to save space. In the Six Forks code the author does this MYLABEL = * to make it stand out. Me, I want to pack everything in to a small space to cut down on the typing. In the line assemblers like Mac/65 it costs you what, 5 bytes for a line (the line # plus offset etc) which doesn't sound like much but in a big program like say Basic XE, all of those empty label lines would add up to something significant.
  14. I managed to catch it freezing again. This time was when I clicked to enable the debugger, this was the result. I'll send you the dump.
  15. In order to save space, Hume wrote all of the Six Forks stuff with only one space in front of the mnemonic if there was no label on that line. With all the dense commentary and semicolons everywhere it was often frustrating to find a typo because I got so used to not "seeing" that first space. So now whenever I make changes to his stuff, I pad the damn thing over to column 10 like IBM intended, lol.
  • Create New...