Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #6085

Re: Typo in ProDOS refTechMan

From Jeff Blakeney <CUTjeffrey_blakeney@yahoo.ca>
Newsgroups comp.sys.apple2.programmer
Subject Re: Typo in ProDOS refTechMan
Date 2023-08-28 08:28 -0400
Organization A noiseless patient Spider
Message-ID <uci3t9$1mmm2$1@dont-email.me> (permalink)
References (3 earlier) <uc4d2e$4ofj$1@solani.org> <20230823152214.5e86230e@laptop-sigfox> <yubr0ntht3u.fsf@jpen.ca> <uc7hb2$3f3vg$1@dont-email.me> <a8qdndVgG6oR33H5nZ2dnZfqnPWdnZ2d@giganews.com>

Show all headers | View raw


On 2023-08-28 2:45 a.m., Michael J. Mahon wrote:
> Jeff Blakeney <CUTjeffrey_blakeney@yahoo.ca> wrote:
>> As far as I remember my 6502 assembly, when you do a JSR, the processor
>> has already read the JSR byte and the two byte address so the PC is
>> pointing at the DB CMDNUM statement and that is what is pushed on the
>> stack.  The MLI pulls that address off the stack, adds 3 to it, pushes
>> it back on the stack and does an RTS so that the BNE ERROR statement
>> will get executed.
>>
>> In other words, the SYSCALL is the address of the JSR but it isn't the
>> address that gets pushed onto the stack when the JSR is executed.
> 
> Well, the details are: JSR pushes the address of the JSR opcode plus *two*
> on the stack, and the RTS pops the address and adds *one* to get the return
> PC value.

I haven't done any 6502 coding in a long time but my memory tells me the 
6502 did it this way:  PC has address of SYSCALL (or probably SYSCALL-1 
and increments the PC to get there), processor reads the byte there to 
see what opcode to execute, sees it is a JSR so increments the PC and 
reads the low byte of the address, increments the PC and reads the high 
byte of the address, pushes the current PC (SYSCALL +2) to the stack, 
changes the PC to the address it just read and continues execution from 
there.  When it hits an RTS it pulls the address off the stack, adds one 
to it and continues executing from there.

> This doesn’t change the need to add 3 to the stacked value to skip 3 bytes
> of in-line data, but it does mean that the stacked address points at the
> high byte of the JSR, not the first byte of the in-lined data.
> 
> Sometimes details matter. ;-)

Breaking it down above, I realized that I probably got it wrong in my 
original post and the stack gets the address of the high byte and not 
the address of the DB CMDNUM.  Also it makes me wonder if the 6502 
subtracts one from the JSR address when it puts it in the PC so that it 
can be incremented before reading the opcode at the JSR address.  It 
depends on whether the 6502 always increments the PC before reading the 
next opcode and my memory fails me on that point.

As to the original question, the 6502 pushes SYSCALL + 2 to the stack, 
the MLI needs to add 3 to the address pulled off the stack, the 6502 
adds 1 when it does the RTS so you end up continuing execution at 
SYSCALL +6 in the example.

Knowing the details of how the 6502 works in this case isn't really 
necessary, you just need to know that your code will continue executing 
after the command block.  :)

Back to comp.sys.apple2.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Typo in ProDOS refTechMan Colin Leroy-Mira <colin@colino.net> - 2023-08-22 22:19 +0200
  Re: Typo in ProDOS refTechMan Jerry Penner <jerry+a2@jpen.ca> - 2023-08-22 22:49 -0600
    Re: Typo in ProDOS refTechMan Colin Leroy-Mira <colin@colino.net> - 2023-08-23 08:23 +0200
      Re: Typo in ProDOS refTechMan Oliver Schmidt <ol.sc@web.de> - 2023-08-23 07:38 +0000
        Re: Typo in ProDOS refTechMan Colin Leroy-Mira <colin@colino.net> - 2023-08-23 15:22 +0200
          Re: Typo in ProDOS refTechMan Jerry Penner <jerry+a2@jpen.ca> - 2023-08-24 00:06 -0600
            Re: Typo in ProDOS refTechMan Jeff Blakeney <CUTjeffrey_blakeney@yahoo.ca> - 2023-08-24 08:10 -0400
              Re: Typo in ProDOS refTechMan Michael J. Mahon <mjmahon@aol.com> - 2023-08-28 06:45 +0000
                Re: Typo in ProDOS refTechMan Jeff Blakeney <CUTjeffrey_blakeney@yahoo.ca> - 2023-08-28 08:28 -0400
                Re: Typo in ProDOS refTechMan Michael J. Mahon <mjmahon@aol.com> - 2023-08-31 18:54 +0000
                Re: Typo in ProDOS refTechMan Peter 'Shaggy' Haywood <phaywood@alphalink.com.au> - 2023-08-31 13:30 +1000
                Re: Typo in ProDOS refTechMan Michael J. Mahon <mjmahon@aol.com> - 2023-08-31 18:54 +0000
                Re: Typo in ProDOS refTechMan Antoine Vignau <ntn.vignau@gmail.com> - 2023-09-07 12:41 -0700
                Re: Typo in ProDOS refTechMan Peter 'Shaggy' Haywood <phaywood@alphalink.com.au> - 2023-09-05 12:14 +1000
  Re: Typo in ProDOS refTechMan qkumba <peter.ferrie@gmail.com> - 2023-08-28 10:23 -0700
    Re: Typo in ProDOS refTechMan Antoine Vignau <ntn.vignau@gmail.com> - 2023-08-28 12:29 -0700

csiph-web