Parameters: Difference between revisions

From ReplayResources
Jump to navigationJump to search
mNo edit summary
Tag: Manual revert
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
__NOTOC__
==History==
==History==
Action Replay MK3 was a shot at a complete freezer pack that allowed multi file tape games to be backed up along with the game and title picture to disk. Since for this to work out a little more than just freezing the computer state is required Datel teamed up with Dosoft (or acquired them, who knows?). With ''MK3'' the '''Parameters''' and '''NOVA TRANSFER''' came to the ROM which we're looking into here. Before the ''MK3'' there was no multi file loader support.
Action Replay MK3 was a shot at a complete freezer pack that allowed multi file tape games to be backed up along with the game and title picture to disk. Since for this to work out a little more than just freezing the computer state is required Datel teamed up with Dosoft (or acquired them, who knows?). With ''MK3'' the '''Parameters''' and '''NOVA TRANSFER''' came to the ROM which we're looking into here. Before the ''MK3'' there was no multi file loader support.
Line 6: Line 6:


Since ''Action Replay'' ROMs only offer the '''NOVA TRANSFER''' and would fail on anything else the ''Enhancement Disk'' comes with '''MULTIMENU 1.1''' which has further descriptions for some ''Parameters'' as well as means of handling other tape loaders. It also contains the actual '''Parameter''' files required for patching the frozen program to disk routines.
Since ''Action Replay'' ROMs only offer the '''NOVA TRANSFER''' and would fail on anything else the ''Enhancement Disk'' comes with '''MULTIMENU 1.1''' which has further descriptions for some ''Parameters'' as well as means of handling other tape loaders. It also contains the actual '''Parameter''' files required for patching the frozen program to disk routines.
[[File:Action_Replay_Freezer.gif|alt=Action Replay Freezer Menu|thumb|right]]


When a major rewrite of the ROM happened with the "Pro" series (AR 4.2+) a few ''Parameters'' were re-worked but it seems most kept working and the system was slowly extended (for a complete list check '''[[Parameters_List|Parameters List]]''').
When a major rewrite of the ROM happened with the "Pro" series (AR 4.2+) a few ''Parameters'' were re-worked but it seems most kept working and the system was slowly extended (for a complete list check '''[[Parameters_List|Parameters List]]''').
Line 55: Line 56:


<syntaxhighlight lang="6502acme">
<syntaxhighlight lang="6502acme">
; JSR $02A7  works like      STA ($8E),Y
; JSR $02B3  works like      LDA ($8E),Y
;---------------------------------------
;---------------------------------------
;  PARAMETER
;  PARAMETER
;---------------------------------------
;---------------------------------------
PARAM   JSR PRINT
PARAM:
        .TEXT "PARAMETER CODE : "
        JSR PRINT
        .BYTE $00
            !TEXT "PARAMETER CODE : "
            !BYTE $00
         JSR GFN1    ; GET FILENAME
         JSR GFN1    ; GET FILENAME
         BEQ SPRUNG3
         BEQ SPRUNG3
         JSR CHKPC
         JSR CHKPC
         LDY #$03
         LDY #$03
PARA1   LDA ($BB),Y  ;FILENAME
PARA1LDA ($BB),Y  ;FILENAME
         CMP PARFIL,Y
         CMP PARFIL,Y
         BNE PARA2
         BNE PARA2
Line 73: Line 79:
         JMP PARA7
         JMP PARA7
;---------------------------------------
;---------------------------------------
PARFIL   .TEXT "NOVA"
PARFIL:  !TEXT "NOVA"
;---------------------------------------
;---------------------------------------
PARA2   LDA #$08
PARA2LDA #$08
         STA $BA
         STA $BA
         JSR FOPEN
         JSR FOPEN
Line 81: Line 87:
         CMP #$05
         CMP #$05
         BEQ PARA3
         BEQ PARA3
PARA3   JMP SPI2
PARA3JMP SPI2
;---------------------------------------
;---------------------------------------
PARA4   LDA $AE
PARA4LDA $AE
         CMP #$BB
         CMP #$BB
         BNE PARA5
         BNE PARA5
         CMP $AF
         CMP $AF
         BEQ PARA9
         BEQ PARA9
PARA5   CLV
PARA5CLV
PARA6   PHP
PARA6PHP
         JSR $FFAB
         JSR $FFAB
         JSR $F642
         JSR $F642
Line 95: Line 101:
         BVS PARA7
         BVS PARA7
         JSR PRINT
         JSR PRINT
         .BYTE $0D
         !BYTE $0D
         .TEXT "FILETYP FALSCH"
         !TEXT "FILETYPE WRONG"
         .BYTE $00
         !BYTE $00
         JMP PARA8
         JMP PARA8
;---------------------------------------
;---------------------------------------
PARA7   CLI
PARA7CLI
         JSR PRINT
         JSR PRINT
         .BYTE $0D,$4F,$4B,$00 ;OK
         !BYTE $0D,$4F,$4B,$00 ; OK Text
PARA8   JSR TSTBIT   ;TASTE
PARA8JSR TSTBIT           ; KEY
SPRUNG3 JMP ($0334)
SPRUNG3: JMP ($0334)           ; Return to freeze menu
;---------------------------------------
;---------------------------------------
PARA9   LDX #$FB
PARA9LDX #$FB
         TXS
         TXS
         BIT $90
         BIT $90
Line 125: Line 131:
         RTS
         RTS
;---------------------------------------
;---------------------------------------
PRU1     JSR PRU3
PRU1:    JSR PRU3
         STA $8E
         STA $8E
PRU2     JSR PRU3
PRU2:    JSR PRU3
         STA $8F
         STA $8F
PRU3     LDA $BB
PRU3:    LDA $BB
         PHA
         PHA
         JSR $FFA5
         JSR $FFA5
         STA $BB
         STA $BB
PRU4     BIT $90
PRU4:    BIT $90
         BVS PARA9
         BVS PARA9
         PLA
         PLA
Line 140: Line 146:
         CMP $BB
         CMP $BB
         BEQ PARA9
         BEQ PARA9
PRU5     CLC
PRU5:    CLC
         RTS
         RTS
;---------------------------------------
;---------------------------------------
PRR1     LDA #$40
PRR1:    LDA #$40
         STA $90
         STA $90
         BNE PRU4
         BNE PRU4
;---------------------------------------
;---------------------------------------
PARTB   .WORD PRR1-1
PARTB:  !WORD PRR1-1
         .WORD PRR2-1
         !WORD PRR2-1
         .WORD PRR3-1
         !WORD PRR3-1
         .WORD PRR4-1
         !WORD PRR4-1
         .WORD PRR5-1
         !WORD PRR5-1
         .WORD PRR6-1
         !WORD PRR6-1
         .WORD PRR6-1
         !WORD PRR6-1
         .WORD PRR7-1
         !WORD PRR7-1
;---------------------------------------
;---------------------------------------
PRR2     JSR PRU1
PRR2:    JSR PRU1
         JSR RCR
         JSR RCR
         JMP PRR2
         JMP PRR2
;---------------------------------------
;---------------------------------------
PRR3     JSR PRU1
PRR3:    JSR PRU1
         BCC PRR3B
         BCC PRR3B
PRR3A   JSR PRU3
PRR3AJSR PRU3
PRR3B   JSR RCR
PRR3BJSR RCR
         INC $8E
         INC $8E
         BNE PRR3A
         BNE PRR3A
         INC $8F
         INC $8F
         BNE PRR3A
         BNE PRR3A
PRR4     JSR PRU2
PRR4:    JSR PRU2
         STA $08E0
         STA $08E0
         LDA $8F
         LDA $8F
Line 174: Line 180:
         JMP PRR4
         JMP PRR4
;---------------------------------------
;---------------------------------------
PRR5     JSR PRU2
PRR5:    JSR PRU2
         STA $08EF
         STA $08EF
         LDA $8F
         LDA $8F
Line 180: Line 186:
         JMP PRR5
         JMP PRR5
;---------------------------------------
;---------------------------------------
PRR6     JSR PRU1
PRR6:    JSR PRU1
         STA ($8E),Y
         STA ($8E),Y
         LDA $8E
         LDA $8E
Line 186: Line 192:
         LDA $8F
         LDA $8F
         STA $7B
         STA $7B
PRR6A   JSR $FFA5
PRR6AJSR $FFA5
         INC $8E
         INC $8E
         BNE PRR6B
         BNE PRR6B
         INC $8F
         INC $8F
PRR6B   STA ($8E),Y
PRR6BSTA ($8E),Y
         BIT $90
         BIT $90
         BVC PRR6A
         BVC PRR6A
Line 199: Line 205:
         BEQ PRR6C
         BEQ PRR6C
         JMP ($8E)
         JMP ($8E)
PRR6C   JMP ($7A)
PRR6CJMP ($7A)
;---------------------------------------
;---------------------------------------
PRR7     JSR PRU3
PRR7:    JSR PRU3
         JSR $FFD2
         JSR $FFD2
         JMP PRR7
         JMP PRR7
;---------------------------------------
;---------------------------------------
CHKPC   LDY #$01
CHKPCLDY #$01
         LDA ($BB),Y
         LDA ($BB),Y
         CMP #$2E
         CMP #$2E     ;"." is 2nd filename character?
         BNE CKPC1
         BNE CKPC1
         DEY
         DEY
         LDA ($BB),Y
         LDA ($BB),Y
         LDX #$08
         LDX #$08
         CMP #$45    ;E
         CMP #$45    ;"E" (Extension from disk)
         BEQ CKPC2
         BEQ CKPC2
         DEX
         DEX
         CMP #$54    ;T
         CMP #$54    ;"T" (Extension from tape)
         BEQ CKPC2
         BEQ CKPC2
CKPC1   RTS
CKPC1RTS
CKPC2   STX $BA
 
CKPC2STX $BA
         PLA
         PLA
         PLA
         PLA
         JSR PRRT
         JSR PRRT
         JSR BANK1
         JSR BANK1
         .BYTE $1B,$80 ;VECTOREN SETZEN
         !BYTE $1B,$80         ;SET VECTORS - Enables "TURBOLINKER"
;---------------------------------------
;---------------------------------------
         LDA #$00
         LDA #$00
Line 230: Line 237:
         LDY #$0A
         LDY #$0A
         JSR BANK1
         JSR BANK1
         .BYTE $D5,$FF ;LOAD
         !BYTE $D5,$FF         ;LOAD
;---------------------------------------
;---------------------------------------
         BCS CKPC3
         BCS CKPC3
         JSR $0A00
         JSR $0A00             ; Start extension
         JMP ($0334)
         JMP ($0334)           ; Return to freeze menu
CKPC3   JMP SPI2
CKPC3JMP SPI2
;---------------------------------------
; NOVA checks
;---------------------------------------
;---------------------------------------
PARA10   LDY #$02
PARA10LDY #$02
PARA11   LDA $1FD3,Y
PARA11LDA $1FD3,Y
         CMP PARFIL1,Y
         CMP PARFIL1,Y
         BNE PARA13
         BNE PARA13
Line 250: Line 259:
         LDA #$38
         LDA #$38
         STA $1E8E
         STA $1E8E
PARA12   CLC
PARA12CLC
         RTS
         RTS
;---------------------------------------
;---------------------------------------
PARFIL1 .BYTE $32,$35,$30
PARFIL1: !BYTE $32,$35,$30
;---------------------------------------
;---------------------------------------
PARA13   LDA #$FF
; Below code checks several memory locations for
; LDA #$F4 ; STA $XXXX
 
PARA13LDA #$FF
         STA $AB
         STA $AB
PARA14   INC $AB
 
PARA14INC $AB
         LDA $AB
         LDA $AB
         ASL A
         ASL
         ASL A
         ASL
         TAX
         TAX
         LDA PATB1,X
         LDA PATB1,X
Line 267: Line 280:
         STA $8F
         STA $8F
         BEQ PARA12
         BEQ PARA12
; compare with $A9,$F4,$8D
         LDY #$02
         LDY #$02
         SEI
         SEI
PARA15   JSR $02B3
PARA15JSR $02B3         ; LDA ($8E),Y
         CMP PARTX,Y
         CMP PARTX,Y
         BNE PARA14
         BNE PARA14
         DEY
         DEY
         BPL PARA15
         BPL PARA15
; if found, use next table addr for copying replacement code
; within copying $BB is also replaced by a calculated value
         LDA PATB1+2,X
         LDA PATB1+2,X
         STA $8E
         STA $8E
         LDA PATB1+3,X
         LDA PATB1+3,X
         STA $8F
         STA $8F
         LDY #$48
         LDY #$48
PARA16   LDA PARR4,Y
PARA16LDA PARR4,Y
         CMP #$BB
         CMP #$BB
         BNE PARA17
         BNE PARA17
Line 290: Line 309:
         STA $08EF
         STA $08EF
         LDA #$A5
         LDA #$A5
PARA17   JSR $02A7
PARA17JSR $02A7           ; STA ($8E),Y
         DEY
         DEY
         BPL PARA16
         BPL PARA16
         BMI PARA14
         BMI PARA14
;---------------------------------------
;---------------------------------------
PARTX   .BYTE $A9,$F4
PARTX:  !BYTE $A9,$F4,$8D
        .BYTE $8D
 
;---------------------------------------
; NOVA replacement code
;---------------------------------------
;---------------------------------------
PARR4   JSR $FFAE
PARR4JSR $FFAE
PARR5   LDA #$01
PARR5LDA #$01
         STA $B9
         STA $B9
         LDA #$08
         LDA #$08
Line 314: Line 335:
         CLC
         CLC
         RTS
         RTS
PARR6   LDX $DC02
 
PARR6LDX $DC02
         LDY $DC03
         LDY $DC03
         LDA #$FF
         LDA #$FF
Line 322: Line 344:
         LDA #$7F
         LDA #$7F
         STA $DC00
         STA $DC00
PARR7   LDA $DC01
PARR7LDA $DC01
         CMP #$EF  ;SPACE
         CMP #$EF  ;SPACE
         BNE PARR7
         BNE PARR7
Line 329: Line 351:
         BEQ PARR5
         BEQ PARR5
;---------------------------------------
;---------------------------------------
PATB1   .BYTE $E4,$AF,$00,$AF
; NOVA Searchtable
         .BYTE $0E,$D0,$09,$D0
PATB1:  !BYTE $E4,$AF,$00,$AF ; $AFE4, $AF00
         .BYTE $2B,$CF,$D9,$CE
         !BYTE $0E,$D0,$09,$D0 ; $D00E, $D009
         .BYTE $4A,$03,$45,$03
         !BYTE $2B,$CF,$D9,$CE ; $CF28, $CED9
         .BYTE $E4,$03,$B0,$02
         !BYTE $4A,$03,$45,$03 ; $034A, $0345
         .BYTE $00,$00
         !BYTE $E4,$03,$B0,$02 ; $03E4, $02B0
         !BYTE $00,$00         ; $0000 (end marker)
</syntaxhighlight>
</syntaxhighlight>


Line 344: Line 367:


[[Category:Action_Replay]]
[[Category:Action_Replay]]
[[Category:Parameters]]

Latest revision as of 21:32, 24 August 2022

History

Action Replay MK3 was a shot at a complete freezer pack that allowed multi file tape games to be backed up along with the game and title picture to disk. Since for this to work out a little more than just freezing the computer state is required Datel teamed up with Dosoft (or acquired them, who knows?). With MK3 the Parameters and NOVA TRANSFER came to the ROM which we're looking into here. Before the MK3 there was no multi file loader support.

Parameters allow the owner of an original (tape, but in theory would also work for some disk titles) game to create a backup running off disk by loading a parameter into the freezer. By that the original loader is usually removed and replaced by standard routines working off the disk drive. Due to the freeze often happening after some loading screen or intro was shown the "Graphics Disk" contained demo maker alike programs to preserve such things as well. Also the "SceneStealer" extension stems from this idea of supplying a full package apparently.

Since Action Replay ROMs only offer the NOVA TRANSFER and would fail on anything else the Enhancement Disk comes with MULTIMENU 1.1 which has further descriptions for some Parameters as well as means of handling other tape loaders. It also contains the actual Parameter files required for patching the frozen program to disk routines.

Action Replay Freezer Menu

When a major rewrite of the ROM happened with the "Pro" series (AR 4.2+) a few Parameters were re-worked but it seems most kept working and the system was slowly extended (for a complete list check Parameters List).

Datel never released intructions (as far as we know) on how to create own parameters or how to patch a game using the plain NOVALOAD to work without the Action Replay Turbolinker. Let us see if we can remedy this situation at Parameter Creation.

Parameters List

Click header for it :)


Usage

WE ARE MISSING especially english scans for Action Replay V5 (V6) Enhancement Disk Manuals!
The following quote is from the scan of Action Replay MK3 english manual supplement (Enhancement Disk v2.0).pdf.

Please note that this is just a rough outline and some blabla. The introduction text was changed on the documents we have. You'll get the basics anyhow.

    ACTION REPLAY MK III ENHANCEMENT DISK - V2.0
    --------------------------------------------
 This disk contrains a collection of parameters and file copy routines for transfer of non-standard multistage tape programs to disk.
Multistage programs are those which load extra parts as the program progresses. Until recently, these nearly always used the NOVALOAD system, and a system is built into ACTION REPLAY MK III to handle the majority of such programs - see manual for details. Most newer programs use individual loading systems, each of which must be handled in its own specail way.
Transfer of multistage programs is a two part process:

1. ADDING THE PARAMETER
-----------------------
This is done after freezing the main part of the program, before saving to disk.
a) Load the program up to the main title screen and freeze it. Stop the tape. Do not rewind it as the extra parts usually need to be transferred from this point. b) Select PARAMETERS from the menu (or press P). You will then be prompted "ENTER PARAMETER CODE". c) Insert the enhancement disk and enter the parameter code. This is a four charachter code unique to each program (see later). The relevant parameter will be loaded from the disk, and will make the necessary changes to the program. If you type the code wrongly, or have the wrong disk inserted, press a key and enter the code again. If you get the message "START TAPE", ignore this. Press RUN/STOP or RUN/RESTORE then P to return to the parameter prompt. d) Insert your output disk and save the program in the normal way. Always save the program to a blank disk, as the extra parts will take up a lot of disk space. 2. TRANSFERING THE EXTRA PARTS ------------------------------ a) Install FASTLOAD (or DISKMATE if you have the 32K cartridge). b) Insert the enhancement disk and enter LOAD"*",8 and RUN c) Follow the prompts and enter the parameter code (see later) d) Follow the onscreen prompts. Insert your output disk and ensure that the tape is inserted at the correct point. You should also have a second formatted disk handy, as some programs take up more than one disk side. e) The extra parts will now be automatically transferred to disk. If you get the message "NO SPACE ON DISK", insert a blank formatted disk and press return. When the tape runs out, switch off. Transfer is no complete. Program parts will load at turbo speed via FASTLOAD or DISKMATE. Where parts spread over more than one disk, and the program attempts to load a part which is on the other disk, the disk light will flash. If this happens insert the other disk and press SPACE to load. NOTES: When extra parts are on more than one tape side, ensure that the tapes are inserted in the correct order. Sometimes files are repeated on tape to avoid excessive winding. Repeated files need not to be saved to disk and will be ignored. When a multistage programs has been loaded via FASTLOAD or DISKMATE, the freeze button is disabled, as the fastloader needs to be available for loading extra parts. If the freeze facility is required, load the program via the LOADER with fastload disabled, in which case extra parts will load at standard speed.

Tech

"BANK_0.txt" line 2125 onwards of AR_v4-5_Source_Code_German_MWS&Crisp (found in the archives) has this "source code" for the PARAMETERS option of the freezer:

; JSR $02A7   works like       STA ($8E),Y
; JSR $02B3   works like       LDA ($8E),Y

;---------------------------------------
;  PARAMETER
;---------------------------------------
PARAM:
         JSR PRINT
             !TEXT "PARAMETER CODE : "
             !BYTE $00
         JSR GFN1    ; GET FILENAME
         BEQ SPRUNG3
         JSR CHKPC
         LDY #$03
PARA1:   LDA ($BB),Y  ;FILENAME
         CMP PARFIL,Y
         BNE PARA2
         DEY
         BPL PARA1
         JSR PARA10
         JMP PARA7
;---------------------------------------
PARFIL:  !TEXT "NOVA"
;---------------------------------------
PARA2:   LDA #$08
         STA $BA
         JSR FOPEN
         BCC PARA4
         CMP #$05
         BEQ PARA3
PARA3:   JMP SPI2
;---------------------------------------
PARA4:   LDA $AE
         CMP #$BB
         BNE PARA5
         CMP $AF
         BEQ PARA9
PARA5:   CLV
PARA6:   PHP
         JSR $FFAB
         JSR $F642
         PLP
         BVS PARA7
         JSR PRINT
         !BYTE $0D
         !TEXT "FILETYPE WRONG"
         !BYTE $00
         JMP PARA8
;---------------------------------------
PARA7:   CLI
         JSR PRINT
         !BYTE $0D,$4F,$4B,$00 ; OK Text
PARA8:   JSR TSTBIT            ; KEY
SPRUNG3: JMP ($0334)           ; Return to freeze menu
;---------------------------------------
PARA9:   LDX #$FB
         TXS
         BIT $90
         BVS PARA6
         JSR $FFA5
         TAY
         JSR $FFA5
         STA $BB
         STY $8D
         TYA
         ASL A
         TAY
         LDA PARTB+1,Y
         PHA
         LDA PARTB,Y
         PHA
         LDY #$00
         RTS
;---------------------------------------
PRU1:    JSR PRU3
         STA $8E
PRU2:    JSR PRU3
         STA $8F
PRU3:    LDA $BB
         PHA
         JSR $FFA5
         STA $BB
PRU4:    BIT $90
         BVS PARA9
         PLA
         CMP #$BB
         BNE PRU5
         CMP $BB
         BEQ PARA9
PRU5:    CLC
         RTS
;---------------------------------------
PRR1:    LDA #$40
         STA $90
         BNE PRU4
;---------------------------------------
PARTB:   !WORD PRR1-1
         !WORD PRR2-1
         !WORD PRR3-1
         !WORD PRR4-1
         !WORD PRR5-1
         !WORD PRR6-1
         !WORD PRR6-1
         !WORD PRR7-1
;---------------------------------------
PRR2:    JSR PRU1
         JSR RCR
         JMP PRR2
;---------------------------------------
PRR3:    JSR PRU1
         BCC PRR3B
PRR3A:   JSR PRU3
PRR3B:   JSR RCR
         INC $8E
         BNE PRR3A
         INC $8F
         BNE PRR3A
PRR4:    JSR PRU2
         STA $08E0
         LDA $8F
         STA $08E1
         JMP PRR4
;---------------------------------------
PRR5:    JSR PRU2
         STA $08EF
         LDA $8F
         STA $08EE
         JMP PRR5
;---------------------------------------
PRR6:    JSR PRU1
         STA ($8E),Y
         LDA $8E
         STA $7A
         LDA $8F
         STA $7B
PRR6A:   JSR $FFA5
         INC $8E
         BNE PRR6B
         INC $8F
PRR6B:   STA ($8E),Y
         BIT $90
         BVC PRR6A
         JSR $FFAB
         JSR $F642
         LDA $8D
         CMP #$06
         BEQ PRR6C
         JMP ($8E)
PRR6C:   JMP ($7A)
;---------------------------------------
PRR7:    JSR PRU3
         JSR $FFD2
         JMP PRR7
;---------------------------------------
CHKPC:   LDY #$01
         LDA ($BB),Y
         CMP #$2E     ;"." is 2nd filename character?
         BNE CKPC1
         DEY
         LDA ($BB),Y
         LDX #$08
         CMP #$45     ;"E" (Extension from disk)
         BEQ CKPC2
         DEX
         CMP #$54     ;"T" (Extension from tape)
         BEQ CKPC2
CKPC1:   RTS

CKPC2:   STX $BA
         PLA
         PLA
         JSR PRRT
         JSR BANK1
         !BYTE $1B,$80         ;SET VECTORS - Enables "TURBOLINKER"
;---------------------------------------
         LDA #$00
         STA $B9
         TAX
         LDY #$0A
         JSR BANK1
         !BYTE $D5,$FF         ;LOAD
;---------------------------------------
         BCS CKPC3
         JSR $0A00             ; Start extension
         JMP ($0334)           ; Return to freeze menu
CKPC3:   JMP SPI2
;---------------------------------------
; NOVA checks
;---------------------------------------
PARA10:  LDY #$02
PARA11:  LDA $1FD3,Y
         CMP PARFIL1,Y
         BNE PARA13
         DEY
         BPL PARA11
         LDA #$35
         STA $1FD3
         LDA #$39
         STA $1FD4
         STA $1FD5
         LDA #$38
         STA $1E8E
PARA12:  CLC
         RTS
;---------------------------------------
PARFIL1: !BYTE $32,$35,$30
;---------------------------------------
; Below code checks several memory locations for
; LDA #$F4 ; STA $XXXX

PARA13:  LDA #$FF
         STA $AB

PARA14:  INC $AB
         LDA $AB
         ASL
         ASL
         TAX
         LDA PATB1,X
         STA $8E
         LDA PATB1+1,X
         STA $8F
         BEQ PARA12

; compare with $A9,$F4,$8D
         LDY #$02
         SEI
PARA15:  JSR $02B3          ; LDA ($8E),Y
         CMP PARTX,Y
         BNE PARA14
         DEY
         BPL PARA15

; if found, use next table addr for copying replacement code
; within copying $BB is also replaced by a calculated value
         LDA PATB1+2,X
         STA $8E
         LDA PATB1+3,X
         STA $8F

         LDY #$48
PARA16:  LDA PARR4,Y
         CMP #$BB
         BNE PARA17
         TYA
         CLC
         ADC $8E
         STA $08EE
         LDA $8F
         ADC #$00
         STA $08EF
         LDA #$A5
PARA17:  JSR $02A7           ; STA ($8E),Y
         DEY
         BPL PARA16
         BMI PARA14
;---------------------------------------
PARTX:   !BYTE $A9,$F4,$8D

;---------------------------------------
; NOVA replacement code
;---------------------------------------
PARR4:   JSR $FFAE
PARR5:   LDA #$01
         STA $B9
         LDA #$08
         STA $BA
         LDA #$00
         STA $9D
         JSR $F4BB
         BCS PARR6
         LDA #$00
         STA $90
         LDA #$01
         STA $BA
         CLI
         CLC
         RTS

PARR6:   LDX $DC02
         LDY $DC03
         LDA #$FF
         STA $DC02
         LDA #$00
         STA $DC03
         LDA #$7F
         STA $DC00
PARR7:   LDA $DC01
         CMP #$EF   ;SPACE
         BNE PARR7
         STX $DC02
         STY $DC03
         BEQ PARR5
;---------------------------------------
; NOVA Searchtable
PATB1:   !BYTE $E4,$AF,$00,$AF  ; $AFE4, $AF00
         !BYTE $0E,$D0,$09,$D0  ; $D00E, $D009
         !BYTE $2B,$CF,$D9,$CE  ; $CF28, $CED9
         !BYTE $4A,$03,$45,$03  ; $034A, $0345
         !BYTE $E4,$03,$B0,$02  ; $03E4, $02B0
         !BYTE $00,$00          ; $0000 (end marker)