ca65 V2.17 - Raspbian 2.17-1
Main file   : MenuFirmware.asm
Current file: MenuFirmware.asm

000000r 1               ;ProDOS Zero Page
000000r 1               Command = $42 ;ProDOS Command
000000r 1               Unit = $43 ;ProDOS unit (SDDD0000)
000000r 1               BufferLo = $44
000000r 1               BufferHi = $45
000000r 1               BlockLo = $46
000000r 1               BlockHi = $47
000000r 1               
000000r 1               ; ProDOS Error Codes
000000r 1               IOError = $27
000000r 1               NoDevice = $28
000000r 1               WriteProtect = $2B
000000r 1               
000000r 1               InputByte = $c08e+SLOT*$10
000000r 1               OutputByte = $c08d+SLOT*$10
000000r 1               InputFlags = $c08b+SLOT*$10
000000r 1               OutputFlags = $c087+SLOT*$10
000000r 1               
000000r 1               ReadBlockCommand = $01
000000r 1               WriteBlockCommand = $02
000000r 1               GetTimeCommand = $03
000000r 1               ChangeDriveCommand = $04
000000r 1               ExecCommand = $05
000000r 1               LoadFileCommand = $06
000000r 1               SaveFileCommand = $07
000000r 1               MenuCommand = $08
000000r 1               
000000r 1               Wait = $fca8
000000r 1               PrintChar = $fded
000000r 1               Home = $fc58
000000r 1               ReadChar = $fd0c
000000r 1               
000000r 1                .org SLOT*$100 + $C000
00C700  1               ;ID bytes for booting and drive detection
00C700  1  E0 20         cpx #$20    ;ID bytes for ProDOS and the
00C702  1  E0 00         cpx #$00    ; Apple Autostart ROM
00C704  1  E0 03         cpx #$03    ;
00C706  1               
00C706  1  A2 70         ldx #SLOT*$10
00C708  1  86 2B         stx $2b
00C70A  1  86 43         stx Unit
00C70C  1               
00C70C  1               ;force EPROM to second page on boot
00C70C  1  A9 3F         lda #$3f ;set all flags high and page 1 of EPROMi
00C70E  1               PageJump:
00C70E  1  8D F7 C0      sta OutputFlags
00C711  1  4C 19 C7      jmp Start
00C714  1               
00C714  1               ;entry points for ProDOS
00C714  1               DriverEntry:
00C714  1  A9 0F         lda #$0f ;set all flags high and page 0 of EPROM
00C716  1  8D F7 C0      sta OutputFlags
00C719  1               ;since the firmware page changes to 0, this falls through to the driver
00C719  1               
00C719  1               Start:
00C719  1  A9 F0         lda #$f0	;restore COUT after PR# called
00C71B  1  85 36         sta $36
00C71D  1  A9 FD         lda #$fd
00C71F  1  85 37         sta $37
00C721  1  20 58 FC      jsr Home	;clear screen and show menu options
00C724  1  A0 00         ldy #$00
00C726  1               PrintString:
00C726  1  B9 BC C7      lda Text,y
00C729  1  F0 08         beq WaitForRPi
00C72B  1  09 80         ora #$80
00C72D  1  20 ED FD      jsr PrintChar
00C730  1  C8            iny
00C731  1  D0 F3         bne PrintString
00C733  1               
00C733  1               WaitForRPi:
00C733  1  AD FB C0      lda InputFlags
00C736  1  2A            rol
00C737  1  B0 0D         bcs OK
00C739  1  A9 FF         lda #$ff
00C73B  1  20 A8 FC      jsr Wait
00C73E  1  A9 AE         lda #'.'+$80
00C740  1  20 ED FD      jsr PrintChar
00C743  1  4C 33 C7      jmp WaitForRPi
00C746  1               
00C746  1               OK:
00C746  1  20 58 FC      jsr Home ;clear screen
00C749  1               
00C749  1  A9 08         lda #MenuCommand ;request menu text from RPi
00C74B  1  20 6A C7      jsr SendByte
00C74E  1               
00C74E  1               DumpOutput:
00C74E  1  20 88 C7      jsr GetByte
00C751  1  C9 00         cmp #$00
00C753  1  F0 06         beq GetChar
00C755  1  20 ED FD      jsr PrintChar
00C758  1  18            clc
00C759  1  90 F3         bcc DumpOutput
00C75B  1               
00C75B  1               GetChar:
00C75B  1  20 0C FD      jsr ReadChar
00C75E  1  38            sec	;subtract ascii "1" to get 0 - 3 from "1" to "4"
00C75F  1  E9 B1         sbc #$b1
00C761  1  0A            asl	;put in top nibble as EPROM page
00C762  1  0A            asl
00C763  1  0A            asl
00C764  1  0A            asl
00C765  1  09 0F         ora #$0f ;set all flags high
00C767  1  4C 0E C7      jmp PageJump
00C76A  1               
00C76A  1               SendByte:
00C76A  1  48            pha
00C76B  1               waitWrite:
00C76B  1  AD FB C0      lda InputFlags
00C76E  1  2A            rol
00C76F  1  2A            rol
00C770  1  B0 F9         bcs waitWrite
00C772  1  68            pla
00C773  1  8D FD C0      sta OutputByte
00C776  1  A9 3E         lda #$3e ; set bit 0 low to indicate write started
00C778  1  8D F7 C0      sta OutputFlags
00C77B  1               finishWrite:
00C77B  1  AD FB C0      lda InputFlags
00C77E  1  2A            rol
00C77F  1  2A            rol
00C780  1  90 F9         bcc finishWrite
00C782  1  A9 3F         lda #$3f
00C784  1  8D F7 C0      sta OutputFlags
00C787  1  60            rts
00C788  1               
00C788  1               GetByte:
00C788  1  A9 3D         lda #$3d ;set read flag low
00C78A  1  8D F7 C0      sta OutputFlags
00C78D  1               waitRead:
00C78D  1  AD FB C0      lda InputFlags
00C790  1  2A            rol
00C791  1  B0 FA         bcs waitRead
00C793  1  AD FE C0      lda InputByte
00C796  1  48            pha
00C797  1  A9 3F         lda #$3f ;set all flags high
00C799  1  8D F7 C0      sta OutputFlags
00C79C  1               finishRead:
00C79C  1  AD FB C0      lda InputFlags
00C79F  1  2A            rol
00C7A0  1  90 FA         bcc finishRead
00C7A2  1  68            pla
00C7A3  1               end:
00C7A3  1  60            rts
00C7A4  1               
00C7A4  1  00 00 00 00  .repeat	187-<end
00C7A8  1  00 00 00 00  
00C7AC  1  00 00 00 00  
00C7B0  1  00 00 00 00  
00C7B4  1  00 00 00 00  
00C7B8  1  00 00 00 00  
00C7BC  1               .byte 0
00C7BC  1               .endrepeat
00C7BC  1               
00C7BC  1               Text:
00C7BC  1  41 70 70 6C  .byte	"Apple2-IO-RPi",$8d
00C7C0  1  65 32 2D 49  
00C7C4  1  4F 2D 52 50  
00C7C8  1  69 8D        
00C7CA  1  28 63 29 32  .byte	"(c)2020-2021 Terence J. Boldt",$8d
00C7CE  1  30 32 30 2D  
00C7D2  1  32 30 32 31  
00C7D6  1  20 54 65 72  
00C7DA  1  65 6E 63 65  
00C7DE  1  20 4A 2E 20  
00C7E2  1  42 6F 6C 64  
00C7E6  1  74 8D        
00C7E8  1  8D           .byte   $8d
00C7E9  1  57 61 69 74  .byte	"Waiting for RPi...",$00
00C7ED  1  69 6E 67 20  
00C7F1  1  66 6F 72 20  
00C7F5  1  52 50 69 2E  
00C7F9  1  2E 2E 00     
00C7FC  1               
00C7FC  1  00 00        .byte      0,0     ;0000 blocks = check status
00C7FE  1  07           .byte      7       ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable)
00C7FF  1  14           .byte     DriverEntry&$00FF ;low byte of entry
00C800  1               
00C800  1               
