; ============================================================================== ; Apple II [$D0 ROM] (341-0016) - Programmer's Aid #1 [1978] ; ============================================================================== ; Part 2.5 [$D692~$D716]: BASIC Entry Points by Steve Wozniak [WOZ]; ; Copyright (c) 1978 by Apple Computer Inc. All Rights Reserved ; ------------------------------------------------------------------------------ ; Instructions are in the Programmer's Aid #1 Installation and Operating Manual ; ============================================================================== ; Analyzed (via McFadden's SourceGen) by James Davis [Last Updated: 2020/06/15] ; ============================================================================== ; ; Equates: ; R1L EQU $02 {addr/1} ;Sweet 16 Register #1, Low R1H EQU $03 {addr/1} ;Sweet 16 Register #1, High R2L EQU $04 {addr/1} ;Sweet 16 Register #2, Low R2H EQU $05 {addr/1} ;Sweet 16 Register #2, High R3L EQU $06 {addr/1} ;Sweet 16 Register #3, Low R3H EQU $07 {addr/1} ;Sweet 16 Register #3, High R4L EQU $08 {addr/1} ;Sweet 16 Register #4, Low R4H EQU $09 {addr/1} ;Sweet 16 Register #4, High LOMEM EQU $4A {addr/2} ;Pointer to Start of BASIC Variables RENUM EQU $D408 ;Apple II BASIC Renumber Subroutine ORG $D6DD ; ; ============================================================================== ; Renumber/Append Sweet 16 Equates: SW16 Registers & Locations used here ... (*) ; ============================================================================== ; NEWINCR EQU $02 {addr/1} ;R1L: New LNO Increment (INCR) Value (*) ; LNLO EQU $03 {addr/1} ;R1H: Low LNO of RENUM Range (*) ; LNHI EQU $04 {addr/1} ;R2L: High LNO of RENUM Range (*) ; TBLSTRT EQU $05 {addr/1} ;R2H: LNO Table Start (*) ; TBLINDX1 EQU $06 {addr/1} ;R3L: Pass 1 LNO Table Index (*) ; TBLIM EQU $07 {addr/1} ;R3H: LNO Table Limit (*) ; SCR8 EQU $08 {addr/1} ;R4L: Scratch Register (*) ; HMEM EQU $08 {addr/1} ;R4L: HIMEM (End of Program) (*) ; SCR9 EQU $09 {addr/1} ;R4H: Scratch Register (*) ; PRGNDX EQU $09 {addr/1} ;R4H: Pass 1 Program Index (*) ; ============================================================================== ; ; ; ============================================================================== ; BASIC Renumber Subroutine Entry Points: ; ============================================================================== ; ; **************************************** ; * * ; * RENUMBER * ; * >CLR * ; * >START= * ; * >STEP= * ; * >CALL -10531 * ; * =($D6DD) * ; * * ; * OPTIONAL * ; * >FROM= * ; * >TO= * ; * >CALL -10521 * ; * =($D6E7) * ; * * ; * USE RENX ENTRY * ; * FOR RENUMBER ALL * ; * * ; **************************************** ; ; ----------------------------------- ;BASIC Renumber S/R Entry Pt.: Call -10531 ; ;(to renumber an entire BASIC program) D6DD: A0 00 RENALL LDY #0 ;Clear Y-Index Register D6DF: 84 06 STY R3L ;Clear Sweet 16 Register #3, Low D6E1: 84 07 STY R3H ;Clear Sweet 16 Register #3, High D6E3: 88 DEY ;Reduce Y-Index to -1 D6E4: 98 TYA ;Set Accumulator to -1 D6E5: D0 0E BNE RENCOMMON ;Always Taken ; ; ----------------------------------- ;BASIC Renumber S/R Entry Pt.: Call -10521 ; ;(to renumber part of a BASIC program) D6E7: A0 1A RENPART LDY #26 ;Set Indexed Addressing Index D6E9: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi) D6EC: 85 06 STA R3L ;Set Sweet 16 Register #3, Low D6EE: 84 07 STY R3H ;Set Sweet 16 Register #3, High D6F0: A0 21 LDY #33 ;Set Indexed Addressing Index D6F2: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi) ; ; ----------------------------------- ;BASIC Renumber Entry Pts. Common Routine: ; ;(to renumber all or part of a program) D6F5: 85 08 RENCOMMON STA R4L ;Set Sweet 16 Register #4, Low D6F7: 84 09 STY R4H ;Set Sweet 16 Register #4, High D6F9: A0 08 LDY #8 ;Set Indexed Addressing Index D6FB: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi) D6FE: 85 02 STA R1L ;Set Sweet 16 Register #1, Low D700: 84 03 STY R1H ;Set Sweet 16 Register #1, High D702: A0 11 LDY #17 ;Set Indexed Addressing Index D704: 20 0E D7 JSR RENGETVAR ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi) D707: 85 04 STA R2L ;Set Sweet 16 Register #2, Low D709: 84 05 STY R2H ;Set Sweet 16 Register #2, High D70B: 4C 08 D4 JMP RENUM ;Go to Apple II BASIC Renumber Subroutine ; ============================================================================== ; Renumber/Append Get BASIC Variable Table Entry Subroutine ; ============================================================================== ; ; ----------------------------------- ;Set (A,Y)=(BASIC VARTAB Entry, Lo/Hi) D70E: B1 4A RENGETVAR LDA (LOMEM),Y ;Get BASIC Variable Table Entry, Low D710: 48 PHA ;Push BASIC Variable Table Entry, Low D711: C8 INY ;Advance Indexed Addressing Index D712: B1 4A LDA (LOMEM),Y ;Get BASIC Variable Table Entry, High D714: A8 TAY ;Set (Y)=(BASIC VARTAB Entry, High) D715: 68 PLA ;Set (A)=(BASIC VARTAB Entry, Low) D716: 60 RTS ;Return to Caller