Jump to content

Alfred

Members
  • Posts

    938
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Alfred

  1. It was the low/high byte separation. Normally all you see is a .WORD address. to see low/high there was surprising.
  2. Ok, so the PLA version works, but when I change the sequence back to the stack version: ; all regs 16 bit TSX LDA $0102,X STA CALLER I get $0000 in CALLER. $0100,X should be the next free stack byte, $0101,X is the PHP byte, so $0102,X ought to be the first byte of the return address. What am I missing here K, why am I not seeing $3C52 in the stack version ? edit: NM, in changing the code up I made a mistake about the stack. Both versions work correctly now.
  3. You're absolutely right. I figured it had to be my code but I wasn't seeing it. Thanks.
  4. It really is, I've left out the various SEP/REP and other instructions to simplify the example. The full code is: ABEND PHP SAVE CALLER STATE ; .ALLW ; ; SAVE ALL REGS AS WORD SIZE ; STA SAVEA STX SAVEX STY SAVEY ; ; PUT CALLER'S JSR ADDRESS INTO TERCOD. ; ; TSX X = STKREG. ; LDA $101,X LOW BYTE. PLA PULL CALLER RETURN STA CALLER PUT IN LSB POSITION. ; .ALLB ; PLA STA PSTATUS PROCESSOR STATUS ; PHK PLA STA CALLER+2 CALLER'S BANK ------------------------------------------ I was getting $0303 using the stack extract, so I changed it to the PLA version and it's still wonky. I need to play with it some more to try and understand what's going on with the stack pointer. Edit: yes, I understand the PHK isn't really the caller's bank, it just is in this case.
  5. I've run into an odd quirk in 65816 mode with regards to the stack. Code is simplified here for the example. ; IN NATIVE 8/8 MODE 3C50 JSR $A809 ->> leads to A8D3 via JMP ...... ; ACC IS 16 BIT HERE A8D3 PLA STA $A9BB A9BB $3152 ?? Should be at least $3Cxx, should it not ? This is 4.30 test6.
  6. I'm curious, from what source did you learn 6502 assembly language ? In almost 50 years, I have -never- seen that construct for an init/run vector.
  7. I still have the piece of graph paper with all the clue stuff on it. It was really quite a good game.
  8. The Eidolon also used duplicate sectors. It took me a while to relocate them and alter the boot sequence.
  9. Very low memlo, something like $0CBE compared to 3.2's $1C19. Extra 4K comes in handy. Can't use it with Basic XE though, as they both use the block of ram under the OS at $C000-$CFFF.
  10. If you can find a decent boot disk, unless you are using Basic XE, I would suggest using SpartaDos 2.3.
  11. Agreed. Extremely capable and insanely complicated with dozens and dozens of commands.
  12. I seem to recall the arrow keys are messed up in Altirra, you have to hold the shift key when using the arrow keys.
  13. Yes, one: Forget Bug65. DDT is far superior. I don't understand your comment about using disk versions so you can share. There is nothing about using the cartridge version that stops you from transferring files out of Altirra.
  14. I was wrong, on page 20 of the Action! Runtime manual, chapter 5.2.3 it quite clearly states you must set DEVICE to zero.
  15. Really it's just meant as a bit of coding shorthand, such that when you are dealing with the screen, you can use things like Print or PrintC instead of having to always specify the channel, like PrintD(0,string). It just saves you from having to put in 0, all over the place. Since you're mostly dealing with the screen, you set device to zero and forget about it. If you want to read a dir entry like your example, well then you have to use something like InputSD(1,dirstring). You wouldn't normally change device to 1, unless you maybe had a lot of i/o instructions and didn't feel like typing 1, all the time. Your choice. You just need to remember that whatever the operation is you are about to do, if you aren't using the "D" version and specifying the iocb #, then it will go to wherever device is pointing.
  16. Right, NAK is what the OS returns if the drive response is not A\N\C\E.
  17. You misunderstand. device is the default device that is used when you don’t specify a channel. It is zero by default because iocb 0 is always open for E: by default. So in your first example, you open file B on iocb 1 and set device = 1. Now if you do a PrintB(57) the number will be sent to file B because that’s the channel to which you have set device. It’s very rare that you would change device to other than zero because most of the time you want the output to go to the screen. For the other cases, you just use the channel version of the function like PrintBD.
  18. The error codes in my copy of the OS source are different for the drive than what the OS returns. So it shows the drive returning an error of NACK whereas the OS returns the error code NAK which is a different value. I see, you're rolling your own SIO. Well you can forget using the stock OS routines, they use interrupts. You can't do that for high speed sio, you have to switch to polling because interrupts are just way too slow. Instead of re-inventing the wheel, why not just patch in Hiasoft's code. Throw out the international character set, and the cassette handler, that's usually what everyone does to get room in the rom for their custom code. Good luck.
  19. Looking at the OS SIO code, I see no evidence that is sets $0306 or $0307. NAK is the default error if the device responds with something other than ACK/NACK/ERROR.
  20. NAK is an odd error, that's what you get when the drive door is open. I'm not sure about DTIMLO getting set by the OS, I think Mapping is thinking of the DSKINV call at $E453, which does do some stuff, but you should be calling SIO directly at $E459 for this command. Might as well try it, set DTIMLO to something, 5 or whatever, and $0307 to zero, and if that doesn't work, then it's probably a config issue in Altirra.
  21. Perusing Hiassoft's code, he has the speed command as: ?CMD3F .BYTE $3F,$40 ?ABS21 .WORD HIBUF,1,1,$20 I don't understand why DAUX1/2 needs to be set to $20, but Puff does it too, so there must be a reason. Try that, set $30A to $20 and $30B to zero.
  22. What you want is the Sparta Dos Construction Set manual. Appendix G lists all the commands the US Doubler supports. Your code looks alright but I've never used the speed index command myself. DTIMLO is usually set to 15 for not slow operations, like read or write, but much higher for say formatting a diskette.
  23. How do you disassemble a large ROM file ? I tried RAW but it doesn't work and other modes complain about missing segments. Is there a way to disassemble a plain ROM that has no binary header ?
  24. What BBS programs ? I think BBS 850 Express is the only one I know of that was done in Action!.
  25. Speaking of which you might want to look on Carsten's wiki and check Action! bugsheet #3 and make sure the fixes are applied to your runtime library.
×
×
  • Create New...