Apple2-IO-RPi/Apple2/MenuFirmware.asm

219 lines
3.8 KiB
NASM
Raw Normal View History

2024-01-03 03:51:33 +00:00
; Copyright Terence J. Boldt (c)2020-2024
2022-01-11 04:00:58 +00:00
; Use of this source code is governed by an MIT
; license that can be found in the LICENSE file.
; This file contains the source for the firmware
; that displays the copyright message on boot
; and checks for the RPi status to be ready before
; attempting to boot
2021-03-27 14:25:42 +00:00
;ProDOS Zero Page
Command = $42 ;ProDOS Command
Unit = $43 ;ProDOS unit (SDDD0000)
BufferLo = $44
BufferHi = $45
BlockLo = $46
BlockHi = $47
; ProDOS Error Codes
IOError = $27
NoDevice = $28
WriteProtect = $2B
InputByte = $c08e+SLOT*$10
OutputByte = $c08d+SLOT*$10
InputFlags = $c08b+SLOT*$10
OutputFlags = $c087+SLOT*$10
2021-03-27 14:25:42 +00:00
ResetCommand = $00
2021-03-27 14:25:42 +00:00
ReadBlockCommand = $01
WriteBlockCommand = $02
GetTimeCommand = $03
ChangeDriveCommand = $04
ExecCommand = $05
LoadFileCommand = $06
SaveFileCommand = $07
2021-06-01 23:08:21 +00:00
MenuCommand = $08
2021-03-27 14:25:42 +00:00
2021-07-02 02:34:09 +00:00
Wait = $fca8
PrintChar = $fded
Home = $fc58
ReadChar = $fd0c
BasCalc = $fbc1
htab = $24
vtab = $25
BasL = $28
htab80 = $057b
2021-07-02 02:34:09 +00:00
.org SLOT*$100 + $C000
2021-03-27 14:25:42 +00:00
;ID bytes for booting and drive detection
cpx #$20 ;ID bytes for ProDOS
cpx #$00 ;
2021-03-27 14:25:42 +00:00
cpx #$03 ;
cpx #$3C ;ID byte for Autostart ROM
2021-03-27 14:25:42 +00:00
lda #$3f ;set all flags high and page 3 of EPROM for menu
jmp PageJump
;The following bytes must exist in this location for Pascal communications
;as they are standard pointers for entry points
.byte CommInit&$00FF ;low byte of rts for init of Pascal comms
.byte $43 ; low byte of read for Pascal comms
.byte $49 ; low byte of write for Pascal comms
.byte $4F ; low byte of rts for status of Pascal comms
CommInit:
lda #$0f ; set all flags high and page 0 for comm driver
sta OutputFlags
ldx #$00 ; set error code to 0 for success
rts
2021-03-27 14:25:42 +00:00
PageJump:
sta OutputFlags
jmp Start ;this jump is only called if coming in from PageJump with A=$0f
2021-03-27 14:25:42 +00:00
;entry points for ProDOS
DriverEntry:
lda #$0f ;set all flags high and page 0 of EPROM
sta OutputFlags
2021-03-27 14:25:42 +00:00
;since the firmware page changes to 0, this falls through to the driver
Start:
lda #$f0 ;restore COUT after PR# called
sta $36
lda #$fd
sta $37
;jsr Home ;clear screen and show menu options
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
lda #$02
sta vtab
jsr BasCalc
2021-03-27 14:25:42 +00:00
ldy #$00
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
sty htab
2021-03-27 14:25:42 +00:00
PrintString:
lda Text,y
2021-06-01 00:37:38 +00:00
beq WaitForRPi
2021-03-28 12:12:58 +00:00
ora #$80
2021-07-02 02:34:09 +00:00
jsr PrintChar
2021-03-27 14:25:42 +00:00
iny
bne PrintString
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.if HW_TYPE = 0
2021-06-01 00:37:38 +00:00
WaitForRPi:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
bit InputFlags
bmi Reset
2021-06-01 00:37:38 +00:00
lda #$ff
2021-07-02 02:34:09 +00:00
jsr Wait
2021-07-17 14:13:25 +00:00
lda #'.'+$80
2021-07-02 02:34:09 +00:00
jsr PrintChar
2021-06-01 00:37:38 +00:00
jmp WaitForRPi
Reset:
lda #'_'|$80
jsr PrintChar
lda #ResetCommand
2021-06-01 23:08:21 +00:00
jsr SendByte
lda #$88
jsr PrintChar
lda #'.'|$80
jsr PrintChar
2021-06-01 23:08:21 +00:00
jsr GetByte
beq Ok
jmp Reset
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.else
WaitForRPi:
@1:
bit InputFlags
bmi @2
lda InputByte
jmp @1
@2:
bit InputFlags
bpl @4
bvs @3
lda #ResetCommand
sta OutputByte
@3:
lda #$ff
jsr Wait
lda #'.'+$80
jsr PrintChar
jmp @2
@4:
lda #$ff
jsr Wait
@5:
bit InputFlags
bmi Ok
lda InputByte
jmp @5
.endif
Ok:
lda #$8D
jsr PrintChar
lda #'O'|$80
2021-07-02 02:34:09 +00:00
jsr PrintChar
lda #'K'|$80
jsr PrintChar
Boot:
lda #$0f
2021-03-27 14:25:42 +00:00
jmp PageJump
2021-06-01 23:08:21 +00:00
SendByte:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
bit InputFlags
bvs SendByte
2021-06-01 23:08:21 +00:00
sta OutputByte
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.if HW_TYPE = 0
2021-06-01 23:08:21 +00:00
lda #$3e ; set bit 0 low to indicate write started
sta OutputFlags
finishWrite:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
bit InputFlags
bvc finishWrite
2021-06-01 23:08:21 +00:00
lda #$3f
sta OutputFlags
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.endif
2021-03-27 14:25:42 +00:00
rts
2021-06-01 23:08:21 +00:00
GetByte:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.if HW_TYPE = 0
ldx #$3d ;set read flag low
stx OutputFlags
.endif
2021-06-01 23:08:21 +00:00
waitRead:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
bit InputFlags
bmi waitRead
2021-06-01 23:08:21 +00:00
lda InputByte
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.if HW_TYPE = 0
ldx #$3f ;set all flags high
stx OutputFlags
2021-06-01 23:08:21 +00:00
finishRead:
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
bit InputFlags
bpl finishRead
.endif
2021-06-01 23:08:21 +00:00
rts
Text:
.byte "Apple2-IO-RPi",$8d
2024-01-03 03:51:33 +00:00
.byte "(c)2020-2024 Terence J. Boldt",$8d
.byte $8d
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.if HW_TYPE = 0
.byte "Waiting for RPi FW:0011"
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.else
.byte "Waiting for RPi FW:8011"
Initial Pico hardware support * Added assemble.cmd for Windows. In the long run, some (c)make-based cross-plafrom solution seems preferable. * Fill up the menu page just like the other pages. * Allow to assemble for different hardware types. The first script parameter is used to set the ca65 symbol HW_TYPE. Without parameter, HW_TYPE is set to 0. * Avoid unwanted i/o access. Depending on the 6502, LDA addr,X and/or STA addr,X produce additional phantom reads. In order to avoid those phantom reads to do i/o access, I used the "classic" approach of moving those reads from page $C0 to page $BF. * Made use of BIT instruction to access InputFlags from firmware. Doing the same for access from disk-based software would require selfmodifying code as there's not bit <addr>,x instruction. * Removed push/pop from GetByte. After the replacing the rol instructions with bit instructions with a recent chnage, the only reason left to save a to the stack was setting the OutputFlags. But that can be done using x. * Added InputFlags check for consistency. * Added support for an alternative hardware type. The new hardware type has simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Added another comminucation interface implementation. Use ACM CDC (or another proprietary) USB serial device for communication. Currently VID / PID of a Raspberry Pi Pico SDK CDC UART are hardcoded - see https://github.com/raspberrypi/usb-pid * Revert "Avoid unwanted i/o access." Neither the original hardware type nor the alternative hardware type have any read and write i/o port share addresses. Therefore phantom reads aren't an issue with those hardware types. This reverts commit ae5cb754fb9540794bdb5465a77e1263ca257539. * Adapt to the different error signatures on Linux. So far the code was only tested on Windows. * Added implementation of the alternative hardware type. The implemenation is based on a Raspberry Pi Pico - see https://github.com/a2retrosystems/A2retroNET The new hardware type has a simple UART-type interface. Beside the two data registers, there are only the two bits to indicate readability and writability of the data registers. * Modify the HD image for the alternative hardware type. It is likely desirable to have two HD images for the two hardware types. And likely the apple2driver program should default to the right one based on its protocol setting. BUt given that the HD image(s) shouldn't be part of the actual Git repo anyhow, I don't do anything about this here and now. * Fixed shell startup (?) At least on the alternative hardware, this "blindly sending" a reset command causes the shell to be terminated right away: The driver acknowldges the reset command with a zero byte - and that byte ends up being read by DumpOutput causing it to branch to endOutput. Maybe that sending a reset command is beneficial on the original hardware. Then another .if is required. Or DumpOutput shouldn't quit on reading a zero byte - the shell handler doesn't seem to send it on purpose(?) * Upate HD image with recent shell change. * Fix shell shutdown (?) At least on the alternative hardware, things happen this way: 1. The shell 'exit' command has ptyOut signal outputComplete and terminate. At this point, ptyIn is still blocked up to one second in ReadCharacter - and can therefore not react on outputComplete. 2. The outputComplete handler in ShellCommand sends a zero byte. This makes on the A2 DumpOutput return and the caller send a zero byte. ShellCommand must not return here as ptyIn is still blocked. 3. The zero byte from the A2 has ptyIn return from ReadCharacter, signal userCancelled and terminate. 4. ShellCommand can now return, but it must not send a zero byte, as the A2 is not expecting it - and will therefore later misinterpret it. Maybe the original hardware needs another handling, then differentiation of behavior in shell.go becomes necessary. * Moved boot text out of IIgs copyright message area. Having the boot text start at the left border of the third line makes it look nice on the cold boot screen of all Apple II's - and there's where the user sees it for some time while waiting for the RPi to come up. * Several adjustements: - Get latest Go version as of now. - Nowadays (?) GitHub 'git clone' seems to only work with a GitHub account. Therefore the zip download workaround. The becomes hopefully unnecessary soon with Go module magic. - Use 'go mod tidy' to update .sum file for now. - Error handling for an empty drive 2 is currently not exactly great, so download Total Replay for drive 2. Unfortunately there's no stable URL as of now. - Use $USER and $HOME instead of hardcoded values. - Removed deprecated syslog output directives. * Added brief fork description. * Added ProDOS-Utilities reference. * Reverted back to using 'git clone'. I've no idea why git acted up the other day :-( Now, everything is back to normal... * Ignore Pico build directory. * Updated from https://github.com/a2retrosystems/A2retroNET * Updated from https://github.com/a2retrosystems/A2retroNET At this point, nothing at all is done on an A2 reset. This can likely be improved. However, Apple2-IO-RPi doesn't seem to handle A2 reset exactly gracefully anyhow. In general, it seems desirable to introduce some simple framing protocol - like SLIP - that allows to recover from an A2 reset in the middle of an Apple2-IO-RPi command execution. Such a framing protocol would allow to introduce different frame types. One frame type could then be an A2 reset frame sent by the A2retroNET firmware. * Make use of brand new stable Total Replay download URL. Thanks to 4am :-) * Fixed typos. * Clone upstream ProDOS-Utilities. My ProDOS-Utilities pull request was merged. * Added support for boards without LED. * Updated link. * Adjusted to the current A2retroNET hardware. * Removed support for the Pico W. * Updated URL. * Updated URL. * Make use A2Pico library. * Added link to A2Pico. * Remove intermediates from repo. * Build intermediates from Pico build. * Have LED reflect status of logic ACM connection. * Update upstream repo references. * Adjust build instructions. * Update README.md * Fix build and update dependencies * Fix binary comparison * Fix firware bug on classic hardware --------- Co-authored-by: Oliver Schmidt <ol.sc@web.de>
2024-02-06 03:49:09 +00:00
.endif
end:
.byte $00
.repeat 251-<end
.byte 0
.endrepeat
2021-03-27 14:25:42 +00:00
.byte 0,0 ;0000 blocks = check status
.byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable)
.byte DriverEntry&$00FF ;low byte of entry