aiie/apple/mouserom.lst

152 lines
6.7 KiB
Plaintext

ca65 V2.18 - N/A
Main file : mouserom.asm
Current file: mouserom.asm
000000r 1 .ORG $C400
00C400 1 Entry:
00C400 1 2C 58 FF BIT $FF58 ; well-known RTS location - where RTS is $60
00C403 1 70 1B BVS PREntry ; always branches (used to relocatably branch)
00C405 1
00C405 1 .ORG $C405
00C405 1 INEntry:
00C405 1 38 SEC
00C406 1 90 18 BCC PREntry ; never happens, but has a magic ID byte @ C407 == 18
00C408 1 B8 CLV
00C409 1 50 15 BVC PREntry ; always branches
00C40B 1
00C40B 1 ;; lookup table
00C40B 1 .ORG $C40B
00C40B 1 01 .byte $01 ; magic identifier
00C40C 1 20 .byte $20 ; magic identifier
00C40D 1 68 .byte .LOBYTE(ExitWithError)
00C40E 1 68 .byte .LOBYTE(ExitWithError)
00C40F 1 68 .byte .LOBYTE(ExitWithError)
00C410 1 68 .byte .LOBYTE(ExitWithError)
00C411 1 00 .byte $00
00C412 1 60 .byte .LOBYTE(SetMouse)
00C413 1 6A .byte .LOBYTE(ServeMouse)
00C414 1 7B .byte .LOBYTE(ReadMouse)
00C415 1 80 .byte .LOBYTE(ClearMouse)
00C416 1 85 .byte .LOBYTE(PosMouse)
00C417 1 8A .byte .LOBYTE(ClampMouse)
00C418 1 93 .byte .LOBYTE(HomeMouse)
00C419 1 98 .byte .LOBYTE(InitMouse)
00C41A 1 68 .byte .LOBYTE(ExitWithError)
00C41B 1 68 .byte .LOBYTE(ExitWithError)
00C41C 1 68 .byte .LOBYTE(ExitWithError)
00C41D 1 68 .byte .LOBYTE(ExitWithError)
00C41E 1 68 .byte .LOBYTE(ExitWithError)
00C41F 1 68 .byte .LOBYTE(ExitWithError)
00C420 1
00C420 1 .ORG $C420
00C420 1 PREntry:
00C420 1 48 PHA ; save Y, X, A, S on the stack
00C421 1 98 TYA
00C422 1 48 PHA
00C423 1 8A TXA
00C424 1 48 PHA
00C425 1 08 PHP
00C426 1 78 SEI ; turn off interrupts while we find our address via the stack
00C427 1 20 58 FF JSR $FF58 ; well-known RTS
00C42A 1 BA TSX ; grab stack pointer
00C42B 1 BD 00 01 LDA $0100,X ; inspect the stack frame
00C42E 1 AA TAX ; now A and X hold the high byte of the return address to *us*
00C42F 1 0A ASL ; A <<= 4
00C430 1 0A ASL
00C431 1 0A ASL
00C432 1 0A ASL
00C433 1 A8 TAY ; so Y = $n0, while X = $Cn for whatever slot we're in
00C434 1 28 PLP ; pull Status off the stack
00C435 1 50 0F BVC lastChance
00C437 1 A5 38 LDA $38 ; We're being invoked in an IN# context, not a PR# context.
00C439 1 D0 0D BNE PopAndReturn ; if $38/$39 don't point to us, then exit
00C43B 1 8A TXA
00C43C 1 45 39 EOR $39 ; is $39 == $Cn?
00C43E 1 D0 08 BNE PopAndReturn
00C440 1 InstallInHandler:
00C440 1 A9 05 LDA #$05 ; Update IN handler to point to $Cn05 instead of $Cn00, so we know we've
00C442 1 85 38 STA $38 ;initialized it
00C444 1 D0 0B BNE INHandler
00C446 1 lastChance:
00C446 1 B0 09 BCS INHandler
00C448 1 PopAndReturn:
00C448 1 68 PLA
00C449 1 AA TAX
00C44A 1 68 PLA
00C44B 1 EA NOP
00C44C 1 68 PLA
00C44D 1 99 80 C0 STA $c080,Y ; call soft-switch #0 for our slot to set mouse state
00C450 1 60 RTS
00C451 1 INHandler:
00C451 1 99 81 C0 STA $c081,Y ; call soft-switch #1 for our slot to fill the keyboard buffer w/ mouse info
00C454 1 68 PLA
00C455 1 BD 38 06 LDA $0638,X ; pull the string length from this magic screen hole (X == $Cn)
00C458 1 AA TAX ; which we'll return to the caller in X
00C459 1 68 PLA ; restore Y
00C45A 1 A8 TAY
00C45B 1 68 PLA ; restore A
00C45C 1 BD 00 02 LDA $200,X ; Grab the last character entered in to the buffer by the magic switch call
00C45F 1 60 RTS
00C460 1
00C460 1 SetMouse:
00C460 1 C9 10 CMP #$10 ; values >= $10 are invalid
00C462 1 B0 04 BCS ExitWithError
00C464 1 8D CF C0 STA $C0CF ; soft switch 0x0F, hard-coded slot 4 for now
00C467 1 60 RTS
00C468 1
00C468 1 ExitWithError:
00C468 1 38 SEC ; the spec says carry is set on errors
00C469 1 60 RTS
00C46A 1
00C46A 1 ServeMouse:
00C46A 1 48 PHA
00C46B 1 78 SEI ; disable interrupts while we find out about interrupts
00C46C 1 8D CE C0 STA $C0CE ; soft switch 0x0E, hard-coded slot 4 for now
00C46F 1 A2 04 LDX #$04
00C471 1 BD B8 06 LDA $6B8,X ; check what interrupts we serviced
00C474 1 29 0E AND #$0E
00C476 1 D0 01 BNE _sm1 ; if we serviced any, leave carry clear
00C478 1 38 SEC ; ... but set carry if we serviced none
00C479 1 _sm1:
00C479 1 68 PLA
00C47A 1 60 RTS
00C47B 1
00C47B 1 ReadMouse:
00C47B 1 8D CB C0 STA $C0CB ; soft switch 0x0B, hard-coded slot 4 for now
00C47E 1 18 CLC
00C47F 1 60 RTS
00C480 1
00C480 1 ClearMouse:
00C480 1 8D CA C0 STA $C0CA ; soft switch 0x0A, hard-coded slot 4 for now
00C483 1 18 CLC
00C484 1 60 RTS
00C485 1
00C485 1 PosMouse:
00C485 1 8D C9 C0 STA $C0C9 ; soft switch 0x09, hard-coded slot 4 for now
00C488 1 18 CLC
00C489 1 60 RTS
00C48A 1
00C48A 1 ClampMouse:
00C48A 1 C9 02 CMP #$02
00C48C 1 B0 DA BCS ExitWithError
00C48E 1 8D CD C0 STA $C0CD ; soft switch 0x0D, hard-coded slot 4 for now
00C491 1 18 CLC
00C492 1 60 RTS
00C493 1
00C493 1 HomeMouse:
00C493 1 8D C8 C0 STA $C0C8 ; soft switch 0x08, hard-coded slot 4 for now
00C496 1 18 CLC
00C497 1 60 RTS
00C498 1
00C498 1 InitMouse:
00C498 1 8D CC C0 STA $C0CC ; soft switch 0x0C, hard-coded slot 4 for now
00C49B 1 18 CLC
00C49C 1 60 RTS
00C49D 1
00C49D 1 .ORG $C4FB
00C4FB 1 D6 .byte $D6 ; magic identifier
00C4FC 1 .ORG $C4FF
00C4FF 1 01 .byte $01 ; version
00C500 1
00C500 1