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


Groups > comp.sys.apple2.programmer > #1977 > unrolled thread

RWTS return codes

Started byMark Lemmert <mark.lemmert@gmail.com>
First post2015-11-24 09:59 -0800
Last post2015-11-29 07:20 -0800
Articles 13 — 4 participants

Back to article view | Back to comp.sys.apple2.programmer


Contents

  RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-11-24 09:59 -0800
    Re: RWTS return codes qkumba <peter.ferrie@gmail.com> - 2015-11-24 14:41 -0800
      Re: RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-11-26 08:08 -0800
    Re: RWTS return codes gids.rs@sasktel.net - 2015-11-26 07:36 -0800
      Re: RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-11-26 08:15 -0800
        Re: RWTS return codes qkumba <peter.ferrie@gmail.com> - 2015-11-26 08:53 -0800
        Re: RWTS return codes gids.rs@sasktel.net - 2015-11-26 11:17 -0800
          Re: RWTS return codes Antoine Vignau <antoine.vignau@laposte.net> - 2015-11-26 12:50 -0800
            Re: RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-11-29 07:34 -0800
              Re: RWTS return codes qkumba <peter.ferrie@gmail.com> - 2015-11-29 08:37 -0800
                Re: RWTS return codes qkumba <peter.ferrie@gmail.com> - 2015-11-29 08:41 -0800
                Re: RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-12-02 14:15 -0800
          Re: RWTS return codes Mark Lemmert <mark.lemmert@gmail.com> - 2015-11-29 07:20 -0800

#1977 — RWTS return codes

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-11-24 09:59 -0800
SubjectRWTS return codes
Message-ID<ea18cb22-dd31-4ef1-a592-751221e7a5e9@googlegroups.com>
Is anyone familiar with RWTS return codes? Any suggestions that anyone may have on the issue described below are much appreciated. 


I am working on developing a routine for writing and reading data to/from floppy disk via an interface to RWTS. 

So far the routine works great. The only issue is I am noticing that I often get return codes in IOB table byte $0D that I do not recognize: for example, 

$01.....I often get this code when using a write command code
$09.....I often get this code when reading track 0, sector 0. 
$D3..I got this code when trying to read a copy II plus disk.

In all these cases the read/write appears to have been successful.  



So far the only information I have found on RWTS return codes is in the book Beneath DOS (section 6-5), which lists the following

$00 = no erros
$08 = error during init
$10 = write protect error
$20 = volume mismatch error
$40 = drive error
$80 = read error (obsolete)


My theory is that the above are no the only return codes, they are just the return codes that indicate a serious error. 

I am tempted to design my error handling routine to break if the return code is on the above list, but otherwise ignore the return code and continue.

Does anyone know if it is "safe" to ignore return codes other than the above list? If not, I am wondering that the other return codes are for?

[toc] | [next] | [standalone]


#1978

Fromqkumba <peter.ferrie@gmail.com>
Date2015-11-24 14:41 -0800
Message-ID<c37c6bf6-6a89-45cd-bf78-6fbc59c38b3f@googlegroups.com>
In reply to#1977
Error codes are not meaningful if the carry is clear on return.
Specifically, it's the value of the last byte that was decoded during read, the value of the first nibble fetched after the last one written during write, and 00 if the command was seek, at least.

[toc] | [prev] | [next] | [standalone]


#1980

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-11-26 08:08 -0800
Message-ID<84956491-76a5-48db-b358-bd08ea5f263c@googlegroups.com>
In reply to#1978
On Tuesday, November 24, 2015 at 4:41:40 PM UTC-6, qkumba wrote:
> Error codes are not meaningful if the carry is clear on return.
> Specifically, it's the value of the last byte that was decoded during read, the value of the first nibble fetched after the last one written during write, and 00 if the command was seek, at least.

Thank you for the advice!

I modified my error routine to only treat RWTS return codes as an error if the carry flag is set and so far everything works great. 

[toc] | [prev] | [next] | [standalone]


#1979

Fromgids.rs@sasktel.net
Date2015-11-26 07:36 -0800
Message-ID<a84fef6a-43fd-423e-945f-784c2d8404c7@googlegroups.com>
In reply to#1977
On Tuesday, November 24, 2015 at 11:59:37 AM UTC-6, Mark Lemmert wrote:
> Is anyone familiar with RWTS return codes? Any suggestions that anyone may have on the issue described below are much appreciated. 
> 
> 
> I am working on developing a routine for writing and reading data to/from floppy disk via an interface to RWTS. 
> 
> So far the routine works great. The only issue is I am noticing that I often get return codes in IOB table byte $0D that I do not recognize: for example, 
> 
> $01.....I often get this code when using a write command code
> $09.....I often get this code when reading track 0, sector 0. 
> $D3..I got this code when trying to read a copy II plus disk.
> 
> In all these cases the read/write appears to have been successful.  
> 
> 
> 
> So far the only information I have found on RWTS return codes is in the book Beneath DOS (section 6-5), which lists the following
> 
> $00 = no erros
> $08 = error during init
> $10 = write protect error
> $20 = volume mismatch error
> $40 = drive error
> $80 = read error (obsolete)
> 
> 
> My theory is that the above are no the only return codes, they are just the return codes that indicate a serious error. 
> 
> I am tempted to design my error handling routine to break if the return code is on the above list, but otherwise ignore the return code and continue.
> 
> Does anyone know if it is "safe" to ignore return codes other than the above list? If not, I am wondering that the other return codes are for?


Beagle Bros has a list of errors for Dos3.3 and Prodos.  They may coincide with the return code of RWTS.

1-Language not available(1)
2 or 3-Range error(1)
3-No Device Connected
4-Write Protected
5-End of Data
6-File(1) or Path(2) Not Found
7-Volume Mismatch(1)
8-I/0 Error
9-Disk Full
$A-File Locked
$B-Syntax Error(1) or Invalid Option(2)
$C-No Buffers Available
$D-File Type Mismatch
$E-Program Too Large
$F-Not Direct Command
$11-Directory Full(2)
$12-File Not Open(2)
$13-Duplicate File Name(2)
$14-File Busy(2)
$15-Files Still Open(2)

(1)-Dos 3.3 only
(2)-Prodos only

[toc] | [prev] | [next] | [standalone]


#1981

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-11-26 08:15 -0800
Message-ID<1351ce30-836b-4b8e-8fa4-1a31bf75f126@googlegroups.com>
In reply to#1979
On Thursday, November 26, 2015 at 9:36:27 AM UTC-6, gid...@sasktel.net wrote:
> On Tuesday, November 24, 2015 at 11:59:37 AM UTC-6, Mark Lemmert wrote:
> > Is anyone familiar with RWTS return codes? Any suggestions that anyone may have on the issue described below are much appreciated. 
> > 
> > 
> > I am working on developing a routine for writing and reading data to/from floppy disk via an interface to RWTS. 
> > 
> > So far the routine works great. The only issue is I am noticing that I often get return codes in IOB table byte $0D that I do not recognize: for example, 
> > 
> > $01.....I often get this code when using a write command code
> > $09.....I often get this code when reading track 0, sector 0. 
> > $D3..I got this code when trying to read a copy II plus disk.
> > 
> > In all these cases the read/write appears to have been successful.  
> > 
> > 
> > 
> > So far the only information I have found on RWTS return codes is in the book Beneath DOS (section 6-5), which lists the following
> > 
> > $00 = no erros
> > $08 = error during init
> > $10 = write protect error
> > $20 = volume mismatch error
> > $40 = drive error
> > $80 = read error (obsolete)
> > 
> > 
> > My theory is that the above are no the only return codes, they are just the return codes that indicate a serious error. 
> > 
> > I am tempted to design my error handling routine to break if the return code is on the above list, but otherwise ignore the return code and continue.
> > 
> > Does anyone know if it is "safe" to ignore return codes other than the above list? If not, I am wondering that the other return codes are for?
> 
> 
> Beagle Bros has a list of errors for Dos3.3 and Prodos.  They may coincide with the return code of RWTS.
> 
> 1-Language not available(1)
> 2 or 3-Range error(1)
> 3-No Device Connected
> 4-Write Protected
> 5-End of Data
> 6-File(1) or Path(2) Not Found
> 7-Volume Mismatch(1)
> 8-I/0 Error
> 9-Disk Full
> $A-File Locked
> $B-Syntax Error(1) or Invalid Option(2)
> $C-No Buffers Available
> $D-File Type Mismatch
> $E-Program Too Large
> $F-Not Direct Command
> $11-Directory Full(2)
> $12-File Not Open(2)
> $13-Duplicate File Name(2)
> $14-File Busy(2)
> $15-Files Still Open(2)
> 
> (1)-Dos 3.3 only
> (2)-Prodos only

Thanks for the information!

For the benefit of any future readers of this thread, here are my observations:

From what I've seen, it looks to me like the RWTS return codes are not the same as DOS 3.3 Codes.

For example, I've seen $01 returned many times just by simply writing to a blank (formatted) disk and the write was successful (verified by a corresponding read). I've also seen $09 returned when writing to Track 0, Sector 0 on a blank (formatted) disk, and the write was successful, which clearly would not be the case if the disk was full. 

I suspect that the DOS 3.3 codes refer to codes returned form the DOS file manager, which is one layer of abstraction above RWTS and can be access via assembly language.






[toc] | [prev] | [next] | [standalone]


#1982

Fromqkumba <peter.ferrie@gmail.com>
Date2015-11-26 08:53 -0800
Message-ID<bf81a35c-068f-47b2-a4af-43ad11629580@googlegroups.com>
In reply to#1981
> I suspect that the DOS 3.3 codes refer to codes returned form the DOS file manager, which is one layer of abstraction above RWTS and can be access via assembly language.

Yes, that is so.  They are entirely separate, and must not be confused.

[toc] | [prev] | [next] | [standalone]


#1983

Fromgids.rs@sasktel.net
Date2015-11-26 11:17 -0800
Message-ID<ec4f5483-093c-4dcc-bca6-5b7337355773@googlegroups.com>
In reply to#1981
On Thursday, November 26, 2015 at 10:15:37 AM UTC-6, Mark Lemmert wrote:
> On Thursday, November 26, 2015 at 9:36:27 AM UTC-6, gid...@sasktel.net wrote:
> > On Tuesday, November 24, 2015 at 11:59:37 AM UTC-6, Mark Lemmert wrote:
> > > Is anyone familiar with RWTS return codes? Any suggestions that anyone may have on the issue described below are much appreciated. 
> > > 
> > > 
> > > I am working on developing a routine for writing and reading data to/from floppy disk via an interface to RWTS. 
> > > 
> > > So far the routine works great. The only issue is I am noticing that I often get return codes in IOB table byte $0D that I do not recognize: for example, 
> > > 
> > > $01.....I often get this code when using a write command code
> > > $09.....I often get this code when reading track 0, sector 0. 
> > > $D3..I got this code when trying to read a copy II plus disk.
> > > 
> > > In all these cases the read/write appears to have been successful.  
> > > 
> > > 
> > > 
> > > So far the only information I have found on RWTS return codes is in the book Beneath DOS (section 6-5), which lists the following
> > > 
> > > $00 = no erros
> > > $08 = error during init
> > > $10 = write protect error
> > > $20 = volume mismatch error
> > > $40 = drive error
> > > $80 = read error (obsolete)
> > > 
> > > 
> > > My theory is that the above are no the only return codes, they are just the return codes that indicate a serious error. 
> > > 
> > > I am tempted to design my error handling routine to break if the return code is on the above list, but otherwise ignore the return code and continue.
> > > 
> > > Does anyone know if it is "safe" to ignore return codes other than the above list? If not, I am wondering that the other return codes are for?
> > 
> > 
> > Beagle Bros has a list of errors for Dos3.3 and Prodos.  They may coincide with the return code of RWTS.
> > 
> > 1-Language not available(1)
> > 2 or 3-Range error(1)
> > 3-No Device Connected
> > 4-Write Protected
> > 5-End of Data
> > 6-File(1) or Path(2) Not Found
> > 7-Volume Mismatch(1)
> > 8-I/0 Error
> > 9-Disk Full
> > $A-File Locked
> > $B-Syntax Error(1) or Invalid Option(2)
> > $C-No Buffers Available
> > $D-File Type Mismatch
> > $E-Program Too Large
> > $F-Not Direct Command
> > $11-Directory Full(2)
> > $12-File Not Open(2)
> > $13-Duplicate File Name(2)
> > $14-File Busy(2)
> > $15-Files Still Open(2)
> > 
> > (1)-Dos 3.3 only
> > (2)-Prodos only
> 
> Thanks for the information!
> 
> For the benefit of any future readers of this thread, here are my observations:
> 
> From what I've seen, it looks to me like the RWTS return codes are not the same as DOS 3.3 Codes.
> 
> For example, I've seen $01 returned many times just by simply writing to a blank (formatted) disk and the write was successful (verified by a corresponding read). I've also seen $09 returned when writing to Track 0, Sector 0 on a blank (formatted) disk, and the write was successful, which clearly would not be the case if the disk was full. 
> 
> I suspect that the DOS 3.3 codes refer to codes returned form the DOS file manager, which is one layer of abstraction above RWTS and can be access via assembly language.


Yes, but Dos 3.3 needs to handle the disk errors that come from RWTS and convert it to a Dos 3.3 error.  There should be a map of RWTS errors in Dos 3.3 that get converted to the Dos 3.3 errors.

It is the same with Prodos and Basic.system.  MLI errors returned by Prodos are converted to Basic.system errors of which there is a map of errors in Basic.system.

Knowing the Dos 3.3 errors might help in identifying the RWTS errors.

[toc] | [prev] | [next] | [standalone]


#1984

FromAntoine Vignau <antoine.vignau@laposte.net>
Date2015-11-26 12:50 -0800
Message-ID<5d156fbe-a726-49e9-a32c-a81cbe9fbd93@googlegroups.com>
In reply to#1983
What is unclear to me, Mark, is your explanations on the return code in your last message.

Are the error codes from the rwts after a dos call or not?

av

[toc] | [prev] | [next] | [standalone]


#1986

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-11-29 07:34 -0800
Message-ID<f8f871f2-69e9-473c-ad9c-1991feca0966@googlegroups.com>
In reply to#1984
On Thursday, November 26, 2015 at 2:50:31 PM UTC-6, Antoine Vignau wrote:
> What is unclear to me, Mark, is your explanations on the return code in your last message.
> 
> Are the error codes from the rwts after a dos call or not?
> 
> av

I am sorry for any confusion I created in my prior post.  

Could you clarify what you mean by "after a DOS call"? 

Since RWTS is a subroutine of the DOS software loaded into memory by the boot process, I think of a JSR to RWTS via assembly language as being a DOS call, but I am not sure if that is what you mean. 

In any event, if it helps..here is bit more info on how I am getting the RWTS error code (/aka return code)

My program calls RWTS via JSR $3ED9

After making the call, my program checks byt $0D of the IOB table for the return code. The location of the IOB table depends on where DOS gets loaded into memory.  On my system the IOB table starts at $B7E8, so byt $0D is located at $B754

The exact location of the IOB table is identified via JSR $03E3.






[toc] | [prev] | [next] | [standalone]


#1988

Fromqkumba <peter.ferrie@gmail.com>
Date2015-11-29 08:37 -0800
Message-ID<21ea309f-f939-4d9f-9088-41b8c2e8d916@googlegroups.com>
In reply to#1986
On Sunday, November 29, 2015 at 7:34:28 AM UTC-8, Mark Lemmert wrote:
> On Thursday, November 26, 2015 at 2:50:31 PM UTC-6, Antoine Vignau wrote:
> > What is unclear to me, Mark, is your explanations on the return code in your last message.
> > 
> > Are the error codes from the rwts after a dos call or not?
> > 
> > av
> 
> I am sorry for any confusion I created in my prior post.  
> 
> Could you clarify what you mean by "after a DOS call"? 
> 
> Since RWTS is a subroutine of the DOS software loaded into memory by the boot process, I think of a JSR to RWTS via assembly language as being a DOS call, but I am not sure if that is what you mean. 
> 
> In any event, if it helps..here is bit more info on how I am getting the RWTS error code (/aka return code)
> 
> My program calls RWTS via JSR $3ED9
> 
> After making the call, my program checks byt $0D of the IOB table for the return code. The location of the IOB table depends on where DOS gets loaded into memory.  On my system the IOB table starts at $B7E8, so byt $0D is located at $B754
> 
> The exact location of the IOB table is identified via JSR $03E3.

If you call through the file manager (JSR $03D6) directly, or indirectly via "PRINT CHR$(4)", then that's a DOS call.  In that case, RWTS will be called by DOS, and any error that is returned, or any error that results (e.g. sector was read correctly, but requested file does not exist) will be mapped to the DOS table.  If you call RWTS directly, then you have to deal only with the RWTS errors, and the returned carry flag is critical for that purpose.

[toc] | [prev] | [next] | [standalone]


#1989

Fromqkumba <peter.ferrie@gmail.com>
Date2015-11-29 08:41 -0800
Message-ID<99d403ee-2167-42e1-9024-5b22d7872d49@googlegroups.com>
In reply to#1988
More to the point - the only error codes that you will ever see in the IOB are the ones set by RWTS.  DOS does not write anything there.  It has an entirely separate location for its error codes, and it's not in the IOB.

[toc] | [prev] | [next] | [standalone]


#1999

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-12-02 14:15 -0800
Message-ID<3ff9c76c-2995-4454-b35e-361eba8e1999@googlegroups.com>
In reply to#1988
On Sunday, November 29, 2015 at 10:37:33 AM UTC-6, qkumba wrote:
> On Sunday, November 29, 2015 at 7:34:28 AM UTC-8, Mark Lemmert wrote:
> > On Thursday, November 26, 2015 at 2:50:31 PM UTC-6, Antoine Vignau wrote:
> > > What is unclear to me, Mark, is your explanations on the return code in your last message.
> > > 
> > > Are the error codes from the rwts after a dos call or not?
> > > 
> > > av
> > 
> > I am sorry for any confusion I created in my prior post.  
> > 
> > Could you clarify what you mean by "after a DOS call"? 
> > 
> > Since RWTS is a subroutine of the DOS software loaded into memory by the boot process, I think of a JSR to RWTS via assembly language as being a DOS call, but I am not sure if that is what you mean. 
> > 
> > In any event, if it helps..here is bit more info on how I am getting the RWTS error code (/aka return code)
> > 
> > My program calls RWTS via JSR $3ED9
> > 
> > After making the call, my program checks byt $0D of the IOB table for the return code. The location of the IOB table depends on where DOS gets loaded into memory.  On my system the IOB table starts at $B7E8, so byt $0D is located at $B754
> > 
> > The exact location of the IOB table is identified via JSR $03E3.
> 
> If you call through the file manager (JSR $03D6) directly, or indirectly via "PRINT CHR$(4)", then that's a DOS call.  In that case, RWTS will be called by DOS, and any error that is returned, or any error that results (e.g. sector was read correctly, but requested file does not exist) will be mapped to the DOS table.  If you call RWTS directly, then you have to deal only with the RWTS errors, and the returned carry flag is critical for that purpose.

Thank you for the additional insight! That is great to know more about how the DOS error codes relate to the RWTS return codes.

[toc] | [prev] | [next] | [standalone]


#1985

FromMark Lemmert <mark.lemmert@gmail.com>
Date2015-11-29 07:20 -0800
Message-ID<0b6694e1-0e33-42cb-b973-6ecf47be7df0@googlegroups.com>
In reply to#1983
On Thursday, November 26, 2015 at 1:17:25 PM UTC-6, gid...@sasktel.net wrote:
> On Thursday, November 26, 2015 at 10:15:37 AM UTC-6, Mark Lemmert wrote:
> > On Thursday, November 26, 2015 at 9:36:27 AM UTC-6, gid...@sasktel.net wrote:
> > > On Tuesday, November 24, 2015 at 11:59:37 AM UTC-6, Mark Lemmert wrote:
> > > > Is anyone familiar with RWTS return codes? Any suggestions that anyone may have on the issue described below are much appreciated. 
> > > > 
> > > > 
> > > > I am working on developing a routine for writing and reading data to/from floppy disk via an interface to RWTS. 
> > > > 
> > > > So far the routine works great. The only issue is I am noticing that I often get return codes in IOB table byte $0D that I do not recognize: for example, 
> > > > 
> > > > $01.....I often get this code when using a write command code
> > > > $09.....I often get this code when reading track 0, sector 0. 
> > > > $D3..I got this code when trying to read a copy II plus disk.
> > > > 
> > > > In all these cases the read/write appears to have been successful.  
> > > > 
> > > > 
> > > > 
> > > > So far the only information I have found on RWTS return codes is in the book Beneath DOS (section 6-5), which lists the following
> > > > 
> > > > $00 = no erros
> > > > $08 = error during init
> > > > $10 = write protect error
> > > > $20 = volume mismatch error
> > > > $40 = drive error
> > > > $80 = read error (obsolete)
> > > > 
> > > > 
> > > > My theory is that the above are no the only return codes, they are just the return codes that indicate a serious error. 
> > > > 
> > > > I am tempted to design my error handling routine to break if the return code is on the above list, but otherwise ignore the return code and continue.
> > > > 
> > > > Does anyone know if it is "safe" to ignore return codes other than the above list? If not, I am wondering that the other return codes are for?
> > > 
> > > 
> > > Beagle Bros has a list of errors for Dos3.3 and Prodos.  They may coincide with the return code of RWTS.
> > > 
> > > 1-Language not available(1)
> > > 2 or 3-Range error(1)
> > > 3-No Device Connected
> > > 4-Write Protected
> > > 5-End of Data
> > > 6-File(1) or Path(2) Not Found
> > > 7-Volume Mismatch(1)
> > > 8-I/0 Error
> > > 9-Disk Full
> > > $A-File Locked
> > > $B-Syntax Error(1) or Invalid Option(2)
> > > $C-No Buffers Available
> > > $D-File Type Mismatch
> > > $E-Program Too Large
> > > $F-Not Direct Command
> > > $11-Directory Full(2)
> > > $12-File Not Open(2)
> > > $13-Duplicate File Name(2)
> > > $14-File Busy(2)
> > > $15-Files Still Open(2)
> > > 
> > > (1)-Dos 3.3 only
> > > (2)-Prodos only
> > 
> > Thanks for the information!
> > 
> > For the benefit of any future readers of this thread, here are my observations:
> > 
> > From what I've seen, it looks to me like the RWTS return codes are not the same as DOS 3.3 Codes.
> > 
> > For example, I've seen $01 returned many times just by simply writing to a blank (formatted) disk and the write was successful (verified by a corresponding read). I've also seen $09 returned when writing to Track 0, Sector 0 on a blank (formatted) disk, and the write was successful, which clearly would not be the case if the disk was full. 
> > 
> > I suspect that the DOS 3.3 codes refer to codes returned form the DOS file manager, which is one layer of abstraction above RWTS and can be access via assembly language.
> 
> 
> Yes, but Dos 3.3 needs to handle the disk errors that come from RWTS and convert it to a Dos 3.3 error.  There should be a map of RWTS errors in Dos 3.3 that get converted to the Dos 3.3 errors.
> 
> It is the same with Prodos and Basic.system.  MLI errors returned by Prodos are converted to Basic.system errors of which there is a map of errors in Basic.system.
> 
> Knowing the Dos 3.3 errors might help in identifying the RWTS errors.

Ah, got it. Thanks for that insight! I'll look for a RWTS -> DOS3.3 error code map and post it here if I find one. 


Here is my updated understanding, putting all the information I have together:

So far I have not seen any return codes from RWTS with the carry set (carry clear = ignore according to qkumba earlier in this thread), which are not in the list published in the book "Beneath DOS" (below again for reference). But, I've only had my RWTS routine up and running for a short time so I may just not have encountered them yet. It sounds like that might happen and that cross referencing to the DOS 3.3 list may be important. 


RWTS Return codes from book "Beneath DOS"

$00 = no erros 
$08 = error during init 
$10 = write protect error 
$20 = volume mismatch error 
$40 = drive error 
$80 = read error (obsolete) 



[toc] | [prev] | [standalone]


Back to top | Article view | comp.sys.apple2.programmer


csiph-web