CyberpunX Replay Manual: Difference between revisions

From ReplayResources
Jump to navigationJump to search
No edit summary
No edit summary
 
(24 intermediate revisions by the same user not shown)
Line 1: Line 1:
==CyberpunX/Retro Replay 64 Software Manual ('''BETA''')==
<small>22:31, 14 September 2010 (UTC)</small>


Last edit: 18:36, 29 March 2010 (UTC)
__TOC__


The [[installation guide]] is available separately.
* [[:Category:Cartridge_FAQ|Cartridge FAQ]] may resolve conversion and usage questions.
* [[Retro Replay Flashing]] was completely removed from the standard manual and is available separately.


[[Retro Replay Flashing]] was completely removed from the standard manual and is available separately as well.


==THE STARTUP MENU==
=Intro=
 
This manual is based on [[Action Replay MK6 Manual Project64.txt]] and contains changes and additions for the [[CyberpunX Replay]] ROMs.
 
 
=Thanks=
 
 
 
 
 
 
 
 
 
=Startup Menu=


''Although only F1, F3, F5 and F7 are displayed, there are more options''
''Although only F1, F3, F5 and F7 are displayed, there are more options''
Line 13: Line 28:
The screen looks like this:
The screen looks like this:


<pre>
F1 - CONFIGURE MEMORY
F1 - CONFIGURE MEMORY
F3 - NORMAL RESET
F3 - NORMAL RESET
F5 - UTILITIES
F5 - UTILITIES
F7 - INSTALL FASTLOAD
F7 - INSTALL FASTLOAD
 
</pre>
The '''complete''' key setup is:
The '''complete''' key setup is:


<pre>
F1 - Configure Memory            - Fills RAM with $BD and does a normal reset
F1 - Configure Memory            - Fills RAM with $BD and does a normal reset
F2 - Configure Memory            - Fills RAM with $00 and does a normal reset
F2 - Configure Memory            - Fills RAM with $00 and does a normal reset
F3 - Normal Reset
F3 - Normal Reset
F4 - ''Unused''
F4 - Unused yet
F5 - Utilities
F5 - Utilities
F6 (or '0') - Configure Memory  - Fills RAM with $00 and jumps to fastload
F6 (or '0') - Configure Memory  - Fills RAM with $00 and jumps to fastload
F7 - Install Fastload
F7 - Install Fastload
F8 (or 'B') - Configure Memory  - Fills RAM with $BD and jumps to fastload
F8 (or 'b') - Configure Memory  - Fills RAM with $BD and jumps to fastload
</pre>


Please note, that the keys B and 0 are presets only and [[#ROM Configuration|can be changed]].
Please note, that the keys '''B''' and '''0'''(zero) are presets only and [[#ROM Configuration|can be changed]].


'''NORMAL RESET''' switches the cartridge off, making it invisible to the system.
'''NORMAL RESET''' switches the cartridge off, making it invisible to the system.


'''CONFIGURE MEMORY''' fills memory with a single Byte value before resetting. This makes Retro Replay's
'''CONFIGURE MEMORY''' fills memory with a single Byte value before resetting. This makes the CyberpunX Replay's Backup Compaction System more efficient. You should select this option before loading a program to be backed up.
Backup Compaction System more efficient. You should select this option before loading a program  
to be backed up.


==MAKING BACKUPS==


A Backup is a complete, working copy of any program. Retro Replay makes
=Making Backups=
backups by taking a 'snapshot' of the whole of the computers memory, together
with all graphics and timing information, which is then saved in compacted form
to disk.


A Backup is a complete, working copy of any program. CyberpunX Replay makes backups by taking a 'snapshot' of the whole of the computers memory, together with all graphics and timing information, which is then saved in compacted form to disk.


===PREPARING TO MAKE A BACKUP===


Have a blank disk ready for saving the backup. If a disk is new it needs to be
==Preparing To Make A Backup==
formatted (see [[#THE UTILITIES MENU]]). Select CONFIGURE MEMORY from the
 
Have a blank disk ready for saving the backup. If a disk is new it needs to be formatted (see [[#THE UTILITIES MENU]]). Select CONFIGURE MEMORY from the
Startup Menu.
Startup Menu.


===THE BACKUP PROCESS===
 
==The Backup Process==


Load the program you wish to copy. When the program has loaded and is running,
Load the program you wish to copy. When the program has loaded and is running,
Line 61: Line 69:
operating, after which the program is ready to save.
operating, after which the program is ready to save.


===SAVING TO DISK===
 
==Saving To Disk==


Backups can be saved to disk in different styles:
Backups can be saved to disk in different styles:
<pre>
 
1. TURBO    - Single file using the Retro Replay Standard Turbo.
1. TURBO    - Single file using the CyberpunX Replay Standard Turbo.
2. STANDARD - Uses the normal kernal routines, or FAST DOS parallel routines if
2. STANDARD - Uses the normal kernal routines, or FAST DOS parallel routines if
               available. Programs over 202 blocks are saved in two parts.
               available. Programs over 202 blocks are saved in two parts.
</pre>


Select the desired option and enter the filename of your choice (up to 15
Select the desired option and enter the filename of your choice (up to 15 characters). Press RETURN to start saving. If the drive fails to respond
characters). Press RETURN to start the Save. If the drive fails to respond
switch it off / on and try again. This is not usually necessary, but may be important if the original was a commercial disk program.
switch it off / on and try again. This is not usually necessary, but may be
 
important if the original was a commercial disk program.
All being well, your backup is now complete. You may now save again with a different style, restart the program, or exit as required. If there is insufficient space on the disk, you will receive the message "DISK FULL". Insert a fresh, formatted disk and try again. On average 3 backups will fit on one disk side.


All being well, your backup is now complete. You may now save again with a different
''The Devicechange (F1) was altered here to accept recognized drives (by the internal cart routine) at any device between 8 and 30. This affects the Freeze Menu and the Utilities Menu. If your exotic hardware is not properly recognized and therefore skipped, visit me sometime with that particular device. :)''
style, restart the program, or exit as required. If there is insufficient space on the disk,
you will receive the message &quot;DISK FULL&quot;. Insert a fresh, formatted disk and
try again. On average 3 backups will fit on one disk side.


''The Devicechange (F1) was altered here to accept recognized drives (by the
internal cart routine) at any device between 8 and 30. This affects the Freeze
Menu and the Utilities Menu. If your exotic hardware is not properly recognized
and therefore skipped, visit me sometime with that particular device. :)''


===HOW TO LOAD YOUR BACKUPS===
==Loading Your Backups==


LOADING FROM THE DIRECTORY WITH FASTLOAD
LOADING FROM THE DIRECTORY WITH FASTLOAD


<pre>
1. Press F3 or $ (string) to display the Disk Directory (press STOP if a long
1. Press F3 or $ (string) to display the Disk Directory (press STOP if a long
    directory scrolls the screen or CBM or CTRL to slow down scrolling).
  directory scrolls the screen or CBM or CTRL to slow down scrolling).
2. Move the cursor over the name of the program you wish to load.
3. Press F1 and the program will load and run.


2. Move the cursor over the name of the program you wish to load.


3. Press F1 and the program will load and run.
LOADING WITHOUT THE CARTRIDGE PRESENT
</pre>
 
===LOADING WITHOUT THE CARTRIDGE PRESENT===


If you saved your backup with the TURBO or STANDARD option, you will be able to load your backup  
If you saved your backup with the TURBO or STANDARD option, you will be able to load your backup  
in again using standard kernal routines whenever the program is below 202 blocks. Larger backups  
in again using standard kernal routines whenever the program is below 202 blocks. Larger backups  
HAVE to be saved in two parts using the STANDARD save option on the freeze menu to retrive them  
HAVE to be saved in two parts using the STANDARD save option on the freeze menu to retrieve them  
on a standard 64.
on a standard 64.


The &quot;LOADER&quot;, which was a stand-alone program able to load files greater than 202 blocks, was
The stand-alone program ''LOADER'' was able to load files larger than 202 blocks but was removed to save space.
removed to save space.


===TROUBLE SHOOTING===


*PROGRAM WILL NOT SAVE TO DISK.
==Trouble Shooting==


Try switching the drive off and on before starting to save. If you get &quot;DRIVE
* PROGRAM WILL NOT SAVE TO DISK.
NOT READY&quot; it probably means that the disk is unformatted. Format the disk and
try again. &quot;DISK FULL&quot; means that there is insufficient free space for the
program. Use a fresh disk. Other error messages may indicate a faulty disk.


''Switching the drive off/on will re-enable the drive saving in some
Try switching the drive off and on before starting to save. If you get "DRIVE NOT READY"
cases when IRQ or Fast-Loaders kept the serial bus busy.''
it probably means that the disk is unformatted. Format the disk and try again.
"DISK FULL" means that there is insufficient free space for the program. Use a fresh disk.
Other error messages may indicate a faulty disk.


''Switching the drive off/on will re-enable the drive saving in some cases when IRQ or Fast-Loaders kept the serial bus busy.''


*PROGRAM TO BE COPIED WILL NOT LOAD.


Switch the computer off and on and select NORMAL RESET from the Startup Menu
* PROGRAM TO BE COPIED WILL NOT LOAD
before loading the program. A few programs will not load if a disk drive is
 
Switch the computer off and on and select NORMAL RESET from the Startup Menu before loading the program. A few programs will not load if a disk drive is
present. Switch the drive off and switch on after freezing the program.
present. Switch the drive off and switch on after freezing the program.




=Grahpics Facilities=


==GRAPHICS FACILITIES==
==The Sprite Killer==
 
===THE SPRITE KILLER===


To operate the Killer, freeze the program and select SPRITE KILLER. You may
''SPRITE KILLER'' is a menu option on the freeze menu usually found under . You may disable collisions between two sprites or collisions between sprites and background data or both. When restart the program you
then disable collisions between two sprites or collisions between sprites and
will find that when two sprites collide nothing happens. You can then sail through the whole program without losing a life.
background data or both. The program will then restart and, if successful, you
will find that when two sprites collide nothing happens. You can then sail
through the whole program without losing a life.


Results will vary from program to program. Shapes which appear to be sprites may actually  
Results will vary from program to program. Shapes which appear to be sprites may actually  
Line 153: Line 145:
just one collision type.
just one collision type.


===THE SPRITE MONITOR - to be revised===


===SAVING PICTURES (and more)===
==The Char/Sprite Editor (FIXME)==
 


Multicolour pictures may be saved to disk. Freeze the program when the required picture is
==Saveland==
displayed, select SAVELAND from the menu and follow the on-screen prompts. Press RUN/STOP
to return to the Main Menu.


The Saveland allows you to save Charsets, ScreenRam, ColorRam, Hires Bitmaps and Memory  
''Saveland'' allows you to save Charsets, ScreenRam, ColorRam, Hires Bitmaps and Memory  
Locations as well as Koala pictures.
Locations as well as Koala pictures.


''Keep in mind these limitations:''
Keep in mind these limitations as they are not displayed on the menu:
 
* Saving a charset won't work when having a Koala Pic frozen.
* Attempting to save the character ROM will result in the RAM beneath it being saved. ($1000, $9000)
* The Color RAM is saved ''uncleaned''. Will clean it in the future and probably add the option to save it packed.
* Saving memory from $0000 to $ffff will also include the last byte at $ffff.
 
Further testing on all options is needed.


*Saving a charset won't work when having a Koala Pic frozen.
*Attempting to save the character ROM will result in the RAM beneath it being saved. ($1000, $9000)
*The Color RAM is saved uncleaned. Will clean it in the future and probably add the option to save it packed.
*Saving memory from $0000 to $ffff will also include the last byte at $ffff it appears. Further testing on all options needed. :)


===PRINTER DUMP===
==Printer Dump==


This option is gone, only printing in BASIC and stuff still works.
This option is gone, only printing in BASIC and stuff still works.


@P* and @P** still work ofcourse (See <a href="#67">Section 6.7</a>.)
@P* and @P** still work of course (See [[#CENTRONICS PRINTER INTERFACE|CENTRONICS PRINTER INTERFACE]].)
(FIXME)


===THE TEXT EDITOR===
==Text Editor==


This allows you to edit a frozen text based screen. You can use all the normal screen editing keys,  
This allows you to edit a frozen text based screen. You can use all the normal screen editing keys,  
such as the CURSOR keys, INSERT, DELETE, etc., plus some extra ones:
such as the CURSOR keys, INSERT, DELETE, etc., plus some extra ones:
<pre>
CTRL-I  inserts a line
CTRL-D  deletes a line.
F3      changes the border colour
F5      changes the background colour.
F7      Toggles the Position Display On and Off (NEW!)
</pre>


You can change the text colour in the normal way - hold down the CTRL or CBM key
R/S    exits the Editor
and press keys 1-8. Press RETURN to exit.
CTRL-I  inserts a line
CTRL-D  deletes a line.
F3      changes the border colour
F5      changes the background colour.
F7      Toggles the Position Display On and Off (NEW!)
 
Return and Shift-Return act normal now. No more screen scrolling on them as well.
 
You can change the text colour in the normal way - hold down the CTRL or CBM key and press keys 1-8. Press RETURN to exit.


The editor works with text based screens only - you cannot get useful results on a bitmapped  
The editor works with text based screens only - you cannot get useful results on a bitmapped  
screen. Also, if the program uses a different character set, the display characters may not  
screen. Also, if the frozen program uses a different character set, the display characters may not  
correspond with those printed on the keyboard, so a little experimentation may be necessary
correspond with those printed on the keyboard, so a little experimentation may be necessary
- try pressing SHIFT and CBM together to change characters.
- try pressing SHIFT and CBM together to change characters.
Line 199: Line 194:
The screen editor can be used to insert your own messages on the game title screens. It is  
The screen editor can be used to insert your own messages on the game title screens. It is  
also a useful programming aid, because the cursor column and row, and the screen address are  
also a useful programming aid, because the cursor column and row, and the screen address are  
displayed - which helps in designing screen layouts.
displayed which helps in designing screen layouts.


The editor replaces the Text Modifier in old Editions of the cartridge.
<pre>
  Changes here:
  R/S now exits the Editor
  F7 - Display Toggle.
  Return and Shift-Return act normal, no more screen scrolling on them as well.
</pre>
People complained about the display and/or textscreen having the wrong address,
People complained about the display and/or textscreen having the wrong address,
but I cannot find the reason, if that really happens. The current textscreen
but I cannot find the reason, if that really happens. The current textscreen
Line 218: Line 206:


You can also display ASCII codes by typing J (RETURN). Type X to leave the
You can also display ASCII codes by typing J (RETURN). Type X to leave the
monitor. Refer to <a href="#70">Section 7</a> of this manual for more details
monitor. Refer to [[#MACHINE CODE MONITOR|MACHINE CODE MONITOR]] for more details.
on the monitor.


----
=Pokes & Parameters=


==How to Enter==


Computer magazines used to publish ''Pokes'' which can be entered into programs to add features such as infinite lives to game programs. These usually required the machine to be reset.


==POKES & PARAMETERS==
To reset the machine press the RESET button and select ''NORMAL RESET'' from the startup Menu.


===HOW TO ENTER===
In addition, the cartridge allows you to enter pokes after a program has been frozen. Select POKES, enter the required poke or pokes (one at a time), and press RUN/STOP or just RETURN. The program can then be restarted using ''F3''.


Computer magazines used to publish &quot;pokes&quot; which can be entered into programs to
It is possible to enter decimal and hexadecimal notations in mixed order here. You need to enter a leading string ($) for the hexadecimal numbers, of course.
add features such as infinite lives to game programs. These usually require the machine to be reset.  


To reset the machine, press the RESET button and select
'''Examples:'''
NORMAL RESET from the startup Menu. In addition, the cartridge allows you to
enter pokes after a program has been frozen. Select POKES, enter the required
poke or pokes (one at a time), and press RUN/STOP. The program can then be
restarted.


''It is possible to enter decimal and hexadecimal notations in mixed order
here. You need to enter a leading string ($) for the hexadecimal numbers, of course.''
'''Examples:'''
<pre>
   POKE $f,255
   POKE $f,255
   POKE 1024,$4e
   POKE 1024,$4e
   POKE $fce,$ea  
   POKE $fce,$ea  
   POKE 1,0
   POKE 1,0
</pre>


===THE POKEFINDER GENERAL===
'''[[:Category:Pokefinder|Pokefinder]]''' is offering an excessive list of pokes for various games.
 
==POKEFINDER==


This is an automatic infinite lives finder for games. Until now finding pokes was a difficult  
This is an automatic infinite lives finder for games. Until now finding pokes was a difficult  
Line 253: Line 236:
elusive poke, even if you don't understand a word of machine code!
elusive poke, even if you don't understand a word of machine code!


<pre>
Just follow this procedure:
Just follow this procedure:


1) Load up and run your game. When play starts note how many lives you
1) Load up and run your game. When play starts note how many lives you
  begin with and press the Freeze Button.
    begin with and press the Freeze Button.
2) Select POKEFINDER. You will be asked 'HOW MANY LIVES NOW?' - enter the
    number of lives you started with. Pokefinder will now analyze the memory and
    display a list of possible pokes. Usually there will be many of these, so you
    will be prompted to 'LOSE A LIFE AND REFREEZE'.
3) Restart the game and continue to play until you lose a life. Make sure that
    you lose ONE LIFE ONLY. Wait for any &quot;death sequence&quot; to complete. When play
    resumes, press the Freeze Button.
4) Select POKEFINDER again. You will get one of three messages:
    a) LOSE A LIFE AND REFREEZE - go back to 3 above.
    b) ABORTED - Pokefinder has failed.
    c) INSTALLED - the poke (or pokes) have been found and entered into the program.
      Write down the displayed poke(s) for future use. If Pokefinder fails it may
      be because the programmer used an unusual method of counting the number of
      lives remaining. However it can be that you got the starting number of lives
      wrong or accidentally lost more than one life between passes - so its worth
      going through the procedure again in case you made a mistake the first time.
      Tests show a success rate of over 80% - very high for this type of program.
      Some multiload programs need a different poke for each level in which case
      you should repeat the above procedure after each Load.


2) Select POKEFINDER. You will be asked 'HOW MANY LIVES NOW?' - enter the
  number of lives you started with. Pokefinder will now analyze the memory and
  display a list of possible pokes. Usually there will be many of these, so you
  will be prompted to 'LOSE A LIFE AND REFREEZE'.


3) Restart the game and continue to play until you lose a life. Make sure that
''If the border starts to flash while searching for codes, there is a buffer overflow.''
  you lose ONE LIFE ONLY. Wait for any &quot;death sequence&quot; to complete. When play
  resumes, press the Freeze Button.


4) Select POKEFINDER again. You will get one of three messages:
Searching for screencodes was added which should increase possibilities of finding valid codes just a little.


  a) LOSE A LIFE AND REFREEZE - go back to 3 above.
Additionally values between 1 and 255 work now, so there's an even higher chance to find timetrainers and the like. Previous AR carts only used the very last digit entered at the prompt as a search value.
  b) ABORTED - Pokefinder has failed.
 
  c) INSTALLED - the poke (or pokes) have been found and entered into the program.
If the usual search fails, the experienced poke hunter searches for the last digit on lives/timer/energy. Another reason for not finding a valid code may be hex/dec flag usage. In this case letting the game value drop below ten and retry from there on may lead to a final success.
      Write down the displayed poke(s) for future use. If Pokefinder fails it may
      be because the programmer used an unusual method of counting the number of
      lives remaining. However it can be that you got the starting number of lives
      wrong or accidentally lost more than one life between passes - so its worth
      going through the procedure again in case you made a mistake the first time.
      Tests show a success rate of over 80% - very high for this type of program.
      Some multiload programs need a different poke for each level in which case
      you should repeat the above procedure after each Load.
</pre>


''If the border starts to flash while searching for codes, there is a buffer overflow.''
==Parameters==


I added additional searching for screencodes, which should increase possibilities of finding
The ''parameter'' option allows you to load enhancement programs from disk, which can fulfill actions the normal ''CyberpunX Replay'' software is not able to.
valid codes just a little. I found that SBC #$01 hunting would be senseless. :)
<p>
Also values between 1 and 255 work now, so there's an even higher chance to find timetrainers
and the like. Previous AR carts only used the very last digit entered as a search value.
<p>
If the usual search fails, the experienced poke hunter searches for the last digit on lives/timer/energy.
Another reason for not finding a valid code may be hex/dec usage.  


===PARAMETER===
'''The options to load from tape using "'''T.'''" as prefix and loading original ''parameter files'' to backup protected games have been removed'''. We do not endorse the pirating of commercial software and neither should you!


The parameter option allows you to load enhancement programs from disk, which can fulfill actions
The only parameters currently accepted have to start with "'''''E.'''''" as a prefix.
the normal Retro Replay software is not able to.


'''The options to load from tape using &quot;T.&quot; as prefix, or loading NOVAload parameter files to backup
You can find additional information on programming your own extension in the coding appendix. Don't worry, I am planning on extending this menu sometime in the future, so it will become more useful again. :)
NOVAload protected games have been removed'''.
The only parameters currently accepted have to start with &quot;E.&quot; as a prefix.


You can find additional information on programming your own extension in the coding appendix. Don't
worry, I am planning on extending this menu sometime in the future, so it will become more useful again. :)


==THE UTILITIES MENU==
=Utilities Menu=


The Utilities Menu is accessed from the Startup Menu. Some of the utilities can
The Utilities Menu is accessed from the Startup Menu. Some of the utilities can
also be called from Fastload (see <a href="#60">Section 6</a>).
also be called from Fastload (see [[#FASTLOAD UTILITIES|FASTLOAD UTILITIES]]).
<p>
 
<i>The Devicechange (F1) was altered here to accept recognized drives (by the
''The Devicechange (F1) was altered here to accept recognized drives (by the
internal cart routine) at any device between 8 and 30. This affects the Freeze
internal cart routine) at any device between 8 and 30. This affects the Freeze
Menu and the Utilities Menu. If your exotic hardware is not properly recognized
Menu and the Utilities Menu. If your exotic hardware is not properly recognized
and therefore skipped, visit me sometime with that particular device. :)</i>
and therefore skipped, visit me sometime with that particular device. :)''
 


===FORMATTING A DISK===
==Formatting A Disk==


<p>
When a disk is new it needs to be formatted before if can store any
When a disk is new it needs to be formatted before if can store any
programs. When you select this option you will be asked to enter the
programs. When you select this option you will be asked to enter the
Line 324: Line 302:
number which can be any two characters. Press RETURN and the disk will be
number which can be any two characters. Press RETURN and the disk will be
formatted at high speed.
formatted at high speed.
<p>
 
The directory of the disk will be displayed. Occasionally, fast formats do not &quot;take&quot;
The directory of the disk will be displayed. Occasionally, fast formats do not &quot;take&quot;
first time. If the directory does not show 664 BLOCKS FREE, try again and everything
first time. If the directory does not show 664 BLOCKS FREE, try again and everything
should be OK. If a disk consistently fails to format, a faulty disk is indicated.
should be OK. If a disk consistently fails to format, a faulty disk is indicated.
<p>
 
NOTE: Formatting a disk destroys any previous information which may have been on the  
NOTE: Formatting a disk destroys any previous information which may have been on the  
disk. Be certain that you have the correct disk inserted before selecting this option.
disk. Be certain that you have the correct disk inserted before selecting this option.
<p>
 
===THE DISK FILECOPIER===
 
==Disk Filecopier (FIXME)==


The Filecopier will handle Program, Sequential and User files up to 247 blocks in length.
The Filecopier will handle Program, Sequential and User files up to 247 blocks in length.
Line 348: Line 327:
Target Disk(s) should be formatted in advance.
Target Disk(s) should be formatted in advance.


'''NOTE''': The Filecopier cannot copy the Action Replay Loader.
'''NOTE''': The Filecopier cannot copy the Action Replay Loader and is not available currently :(.


===THE WHOLE DISK COPIER===
 
==Whole Disk Copier==


The Disk Copier is for the 1541 (and compatibles) only. You can use the copier with one or two 1541  
The Disk Copier is for the 1541 (and compatibles) only. You can use the copier with one or two 1541  
Line 368: Line 348:
Warp files will also cause errors.
Warp files will also cause errors.


===FASTLOAD UTILITIES===


FASTLOAD is the turbo and utilities function of Retro Replay. Operating in the BASIC environment,  
==Fastload Utilities==
 
FASTLOAD is the turbo and utilities function of CyberpunX Replay. Operating in the BASIC environment,  
numerous extra commands and facilities are available. To install, select INSTALL FASTLOAD from the  
numerous extra commands and facilities are available. To install, select INSTALL FASTLOAD from the  
Startup Menu, or hold down the CBM key when you power up or press the Reset Button.
Startup Menu, or hold down the CBM key when you power up or press the Reset Button.


===THE RAMLOADER===


RAMLOADER is a Disk Turbo - but a very special one. Special because it is fast - very fast! It uses  
==Ramloader==
standard GCR format, so it works with all your existing programs without special conversion. RAMLOADER  
 
''RAMLOADER'' is a Disk Turbo - but a very special one. Special because it is fast - very fast! It uses  
standard GCR format, so it works with all your existing programs without special conversion. ''RAMLOADER''
will load a 202 block program in around 9 seconds, where the typical Disk Turbo would take between  
will load a 202 block program in around 9 seconds, where the typical Disk Turbo would take between  
20-30 seconds, and can not load files of any length. It is fully independent of computer memory. It  
20-30 seconds, and can not load files of any length. It is fully independent of computer memory. It  
works with all drives from the 1541 upwards (including the 1581, and the 1571 in two-sided mode).
works with all drives from the 1541 upwards (including the 1581 and the 1571 in two-sided mode).


The Disk Turbo can be switched out with the command OFF. Load and Save will then operate using the standard  
The Disk Turbo can be switched out with the command '''OFF'''. Load and Save will then operate using the standard  
Kernal calls. Type ON to re-enable the Turbo.
Kernal calls. Type '''ON''' to re-enable the Turbo.


The Ramloader can be switched off and on with the commands @K- and @K+. This
The ''RAMLOADER'' can be switched off and on with the commands @K- and @K+. This reduces loading speed to ''Freeze Turbo'' but doesn't blank the screen during load. (and won't kill already loaded Parameter Extensions in Replay RAM)
reduces loading speed to Freeze Turbo but doesn't blank the screen during load. (and won't kill already  
loaded Parameter Extensions in RAM)


''Ninja/The Dreams reported functionality of the Ramloader on FD drives
''Ninja/The Dreams reported functionality of the Ramloader on FD drives
Line 396: Line 376:
'''NOTE''': Some commercial programs may override the Disk Turbo.
'''NOTE''': Some commercial programs may override the Disk Turbo.


===THE WARP*25 DISK TURBO===


Warp*25 was removed completely to gain space on the ROM.<BR>
==WARP*25 Disk Turbo==
It was 1541 compatible only anyways and had load, save and scratch routines which
ate quite a lot of memory.


===THE TURBOLINKER===
'''WARP*25''' was removed completely to gain space on the ROM.
 
It was 1541 compatible only anyways and had load, save and scratch routines which ate quite a lot of memory.
The program [[Extensions#Warp_25|'''WARP 25''']] from Datel will still allow you to create and load warp-saved files with some work overhead.
 
==Turbolinker==


When you load and run a commercial program with Fastload, you will often find that the cartridge  
When you load and run a commercial program with Fastload, you will often find that the cartridge  
Turbo System is disabled for any subsequent Load/Save operations. This can be remedied by the Turbolinker.
Turbo System is disabled for any subsequent Load/Save operations. This can be remedied by the ''TURBOLINKER''.
<p>
 
Select TURBOLINKER from the menu and select the device to be linked. Then restart the program.
Select ''TURBOLINKER'' from the menu and select the device to be linked. Then restart the program.
<p>
 
Loads and Saves will now be redirected to that device. Note that if the program incorporates it's own
Loads and Saves will now be redirected to that device. Note that if the program incorporates it's own
Turbo system, or does not use the Kernal Load/Save commands, then the Turbolinker will not work.
Turbo system, or does not use the Kernal Load/Save commands, then the ''TURBOLINKER'' will not work.
<p>
 
<I>Basically the load/save vectors are set to the cartridge routines and therefore allow
''Basically the load/save vectors are set to the cartridge routines and therefore allow
programs to use the cartridge even after $fd15 was called and the kernel defaults are set.
programs to use the cartridge even after $FD15 was called and the kernel defaults are set.''
Note: :) I think the most popular program on which this is helpful is Amica Paint (and FLIP),
 
where the turbolinker speeds up slideshows A LOT. :)</I>
==Single Stroke Commands==
<p>
 
<b><u><a name="64">6.4 - SINGLE STROKE COMMANDS.</a></u></b>
A number of single stroke commands are available from Fastload:
<p>
To make your programming life easier, a number of single stroke commands are
available from Fastload:
<p>
<B>1)</B> FUNCTION KEYS


<pre>
'''1)''' FUNCTION KEYS
F1 LOAD the first file on the disk to it's absolute address. (LOAD &quot;0:*&quot;,8,1)
 
F2 LOAD the first file on the disk to the Basic program area. (LOAD &quot;0:*&quot;,8)
F1 LOAD the first file on the disk to it's absolute address. (LOAD &quot;0:*&quot;,8,1)
F3 Display disk directory without corrupting memory
F2 LOAD the first file on the disk to the Basic program area. (LOAD &quot;0:*&quot;,8)
F4 Toggle available drives.
F3 Display disk directory without corrupting memory
F5 LIST
F4 Toggle available drives.
F6 Freeze Menu
F5 LIST
F7 RUN
F6 Freeze Menu
F8 Machine Code Monitor (<a href="#70">see Section 7</a>)
F7 RUN
</pre>
F8 MON [[#MACHINE CODE MONITOR|See here]]
<i>There have been some complains about this F-key setup, but this is the  
 
original setup and I didn't change it.</i>
''There have been some complains about this F-key setup, but this is the '''original Action Replay V5''' setup.''
<p>
 
<B>Note:</B>
'''Note:'''
<i>For drive toggle, the Jiffydos routine will be used if available (Tested with  JD 6.01),  
''For drive toggle, the Jiffydos routine will be used if available (Tested with  JD 6.01),  
else my own routine will search for the next available drive on the bus. Tested in monitor and freezemode.
else my own routine will search for the next available drive on the bus. Tested in monitor and freezemode.
Be careful on a busy drive chain when IRQ loaders and the like keep the serial bus for themselves.
Be careful on a busy drive chain when IRQ loaders and the like keep the serial bus for themselves.
JiffyDOS supplies drive checking up to drive #30, and so do I. (RamLink is said to use Device 16.
JiffyDOS supplies drive checking up to drive #30, and so do I. (RamLink is said to use Device 16.
When JD is smashed into Kernal by RL, it should be reached by the JD routine then. Bug reports welcome.)</i>
When JD is smashed into Kernal by RL, it should be reached by the JD routine then. Bug reports welcome.)''
<p>


<B>2)</B> EASY LOAD/SAVE COMMANDS
<pre>
/PROGNAME equals to LOAD &quot;PROGNAME&quot;,8,1
^PROGNAME equals to LOAD &quot;PROGNAME&quot;,8 & RUN (Arrow Up)
%PROGNAME equals to LOAD &quot;PROGNAME&quot;,8,1 & RUN
&amp;PROGNAME equivalent to VERIFY &quot;PROGNAME&quot;,8,1
{POUND_SIGN}PROGNAME equals to SAVE &quot;PROGNAME&quot;,8


</pre>
'''2)''' EASY LOAD/SAVE COMMANDS
Loading with these commands will only set the Basic End pointers if the program  
 
loads to the start of Basic. Also, the Filename does not corrupt the Basic  
/PROGNAME equals to LOAD &quot;PROGNAME&quot;,8,1
String area. Very long files can be saved with the {POUND_SIGN} command where  
^PROGNAME equals to LOAD &quot;PROGNAME&quot;,8 & RUN (Arrow Up)
the normal save command would give an OUT OF MEMORY ERROR.
%PROGNAME equals to LOAD &quot;PROGNAME&quot;,8,1 & RUN
<p>
&amp;PROGNAME equivalent to VERIFY &quot;PROGNAME&quot;,8,1
{POUND_SIGN}PROGNAME equals to SAVE &quot;PROGNAME&quot;,8
 
Loading with these commands will only set the BASIC end pointers if the program loads to the start of Basic ($0801). Also, the Filename does not corrupt the Basic String area ($9FF0-$9FFF usually). Very long files can be saved with the {POUND_SIGN} command where the normal save command would give an ''?OUT OF MEMORY ERROR''.
 
LOADING FROM THE DIRECTORY
LOADING FROM THE DIRECTORY
<p>
 
If you display the directory and then move the cursor onto a line containing an  
If you display the directory and then move the cursor onto a line containing an entry, you can load that program simply by pressing '''F1''' to load and run or '''F2''' to load without running. This is the most convenient way of loading a program.
entry, you can load that program simply by pressing F1 to load and run or F2 to
 
load without running. This is a very convenient way of loading a program.
'''3)''' EASY ACCESS TO THE ERROR CHANNEL.
<p>
 
<B>3)</B> EASY ACCESS TO THE ERROR CHANNEL.
<p>
Instead of using OPEN 15,8,15 &quot;COMMANDSTRING&quot;:CLOSE 15, you may use the &quot;@&quot; key
Instead of using OPEN 15,8,15 &quot;COMMANDSTRING&quot;:CLOSE 15, you may use the &quot;@&quot; key
to send disk commands and read the error channel:
to send disk commands and read the error channel:


<pre>
 
@          - reads the error channel of the current device.
@          - reads the error channel of the current device.
@(device)  - Switches to (device) and displays the status.
@(device)  - Switches to (device) and displays the status.
@#(device) - Stupidly writes (device) to 186/$ba witout status message. (This
@#(device) - Stupidly writes (device) to 186/$ba witout status message. (This
            option is used by the F4 toggle, but the F4 device toggle
              option is used by the F4 toggle, but the F4 device toggle
            previously scans the devices from current up to #30 to ensure a  
              previously scans the devices from current up to #30 to ensure a  
            drive is present at the selected address.)
              drive is present at the selected address.)
@I        - initialize the drive
@I        - initialize the drive
@V        - validate (cannot be used on Warp*25 disks)
@V        - validate (cannot be used on Warp*25 disks)
@R:NEW=OLD - rename a file.
@R:NEW=OLD - rename a file.
@N:NAME    - clear the directory of a previously used disk.
@N:NAME    - clear the directory of a previously used disk.
@N:NAME,ID - format a new disk.
@N:NAME,ID - format a new disk.
@$ or $    - display directory.
@$ or $    - display directory.
@S:NAME    - scratch (delete) a program from the disk.
@S:NAME    - scratch (delete) a program from the disk.
@H:NAME,ID - a new command not available in the normal DOS. This changes the  
@H:NAME,ID - a new command not available in the normal DOS. This changes the  
            name and ID of the disk without clearing the directory.
              name and ID of the disk without clearing the directory.
</pre>
              Initialize was added here to re-read the drive buffer,
<i>NOTE: @s:name1,name2,name3,names*  also works.<br>
              so the next hit on F3 will really show you a new header on the dir.
Initialize was added here to re-read the drive buffer, so the next hit on F3 will really show you  
a new header on the dir.</i>
NOTE:        @s:name1,name2,name3,names*  works to scratch several files at once.
<p>
 
@K- and @K+ control the fastload-mode. While @K+ gives you the normal fastload speed, @K- will switch  
 
@K- and @K+ control the fastload-mode (as already explained at [[#Ramloader]]). While @K+ gives you the normal fastload speed, @K- will switch  
to the slower speeder used by the freezer. The advantages of @K- are simple:
to the slower speeder used by the freezer. The advantages of @K- are simple:
<p>
 
a) The Retro Replay RAM is kept, so previously loaded extensions stay in RAM.<br>
a) The Replay RAM is kept so previously loaded extensions stay in RAM (Carts >8kb RAM should be able to avoid this).
b) Programs can sometimes be loaded from bad disks using this mode.<br>
 
c) PAL/NTSC compatibility.<br>
b) Programs can sometimes be loaded from bad disks using this mode.
<p>
 
c) PAL/NTSC compatibility.
 


@=8 and @=9 will change the current device to the given device number.
@=8 and @=9 will change the current device to the given device number.
<p>
 
<i>This is a sort of drive toggle, like some old copy programs provide it. Use the logical  
''This is a sort of drive toggle, like some old copy programs provide it. Use the logical  
turn-off/on drive sequence to avoid device number collisions. This command is and will stay  
turn-off/on drive sequence to avoid device number collisions. This command is and will stay  
limited to drive 8 and 9, but SHOULD be able to change e.g. device 11 to 9. This command should  
limited to drive 8 and 9, but SHOULD be able to change e.g. device 11 to 9. This command should  
work fine with 1541 and 1581 drives, as the required Zeropage adresses on the drive memory are
work fine with 1541 and 1581 drives, as the required Zeropage adresses on the drive memory are
used the same way. I am not sure about FD drives, as I found no documentation about them so far.</i>
used the same way. I am not sure about FD drives, as I found no documentation about them so far.''
<p>
 
Hints:
Hints:
<p>
 
If you use a two drive system, the second drive can be accessed by reading its error channel, e.g. @9.
If you use a two drive system, the second drive can be accessed by reading its error channel, e.g. @9.
Subsequent single stroke commands will be directed to device 9. If a filename contains leading or trailing
Subsequent single stroke commands will be directed to device 9. If a filename contains leading or trailing
spaces, it should be enclosed in quotes, e.g. &quot;&nbsp;PROGNAME&quot;.
spaces, it should be enclosed in quotes, e.g. " PROGNAME".
<p>
 
And you may also use: @(device)(command) to change to the device and immediately execute the  
And you may also use: @(device)(command) to change to the device and immediately execute the command (e.g. @8$ or @9n:test,id).
command (e.g. @8$ or @9n:test,id).
 
<p>
Consult your disk drive manual for further information about the error channel.
Consult your disk drive manual for further information about the error channel.
<p>
<B>ARE YOU SURE?</B> has been removed - so be careful again on scratch and format.


<p>
<b><u><a name="65">6.5. SPLASHSCREEN.</a></u></b>
<p>
A funky name for a (hopefully) useful function.<br>


<B>2)</B> CBM-key along with an F-Key!<p>
'''ARE YOU SURE?''' has been removed - so be careful again on scratch and format.
 
 
==Splashscreen==
 
A funky name for a (hopefully) useful function.
 
'''2)''' CBM-key along with an F-Key!


Using CBM and F1 or CBM and F3 allows you to switch between different copies of the
Using CBM and F1 or CBM and F3 allows you to switch between different copies of the
Line 534: Line 508:
These areas are kept untouched (as far as possible) and serve you with a
These areas are kept untouched (as far as possible) and serve you with a
reset-proof ramdisk even.
reset-proof ramdisk even.
<p>
 
32kb ROMs only have CBM and F1 and the saved screen can be destroyed by the freeze
32kb ROMs only have CBM and F1 and the saved screen can be destroyed by the freeze
mode sometimes. This is due to less available RAM on old AR cartridges. 64kb ROMs
mode sometimes. This is due to less available RAM on old AR cartridges. 64kb ROMs
will use the 32kb RAM available and shouldn't cause problems here.
will use the 32kb RAM available and shouldn't cause problems here.
<p>


<B>CBM & F7</B> will be used in the future to enter the <B>SilverSurfer</B> mode during
 
'''CBM & F7''' will be used in the future to enter the '''SilverSurfer''' mode during
monitor or basic mode. Menumodes on PowerUp and Freezer will support automatic detection
monitor or basic mode. Menumodes on PowerUp and Freezer will support automatic detection
of SilverSurfer initiated commands.
of ''SilverSurfer'' initiated commands.
<p>
 
Play a little with it. Hope you like it.
Play a little with it. Hope you like it.


<p>
 
<b><u><a name="66">6.6. TOOLKIT COMMANDS.</a></u></b>
==Toolkit Commands==
<p>
 
A number of extra basic commands are provided, which operate in direct mode. The commands may  
A number of extra basic commands are provided, which operate in direct mode. The commands may  
be abbreviated by typing just the first three characters.
be abbreviated by typing just the first three characters.
<P>
<b>MONITOR</b> or <b>MON</b> will start the machine code monitor. See <a href="#70">Section 7</a>.


<p>
'''MONITOR''' or '''MON''' will start the [[#MACHINE CODE MONITOR|machine code monitor]].
<b>OLD</b> will recover a basic program which has just been NEWed.
 
<p>
'''OLD''' will recover a basic program which has just been NEWed.
<b>DELETE</b> or <b>DEL</b> will delete a block of program lines. Syntax is like LIST except that the
 
'''DELETE''' or '''DEL''' will delete a block of program lines. Syntax is like LIST except that the
first line to be deleted must be specified e.g. DEL 1000-2000 will delete lines
first line to be deleted must be specified e.g. DEL 1000-2000 will delete lines
1000 to 2000 inclusive. DEL 1000- will delete from line 1000 to the end of the
1000 to 2000 inclusive. DEL 1000- will delete from line 1000 to the end of the
program.
program.
<p>
 
<b>LINESAVE</b> or <b>LIN</b> will save to disk a section of a basic program e.g.:
'''LINESAVE''' or '''LIN''' will save to disk a section of a basic program e.g.:
LIN &quot;PROGNAME&quot;,8,1000-2000 will save program lines from 1000 to 2000 inclusive.
LIN &quot;PROGNAME&quot;,8,1000-2000 will save program lines from 1000 to 2000 inclusive.
Lines saved in this way may be loaded back as separate basic programs, or MERGED
Lines saved in this way may be loaded back as separate basic programs, or MERGED
into other programs.
into other programs.


<p>
 
<b>MERGE</b> or <b>MER</b> loads a basic program from disk and combines it with a program in memory if two lines  
'''MERGE''' or '''MER''' loads a basic program from disk and combines it with a program in memory if two lines  
have the same number, the new line replaces the existing line. A program may also be merged
have the same number, the new line replaces the existing line. A program may also be merged
with new line numbers e.g.: MERGE &quot;PROGNAME&quot;,8 merges a program with the program in memory.
with new line numbers e.g.: MERGE &quot;PROGNAME&quot;,8 merges a program with the program in memory.
Line 574: Line 547:
line 1000 and incrementing in steps of 10 GOTO & GOSUB statements will NOT be renumbered.
line 1000 and incrementing in steps of 10 GOTO & GOSUB statements will NOT be renumbered.
Merging into a long program is a lengthy process, so be patient.
Merging into a long program is a lengthy process, so be patient.
<p>
 
<b>APPEND</b> or <b>APP</b> differs from MERGE in that the new program is tagged onto the end of the previous one.
'''APPEND''' or '''APP''' differs from MERGE in that the new program is tagged onto the end of the previous one.
It also occurs at turbo speed, e.g.: APP &quot;PROGNAME&quot;,8 loads the program starting at the end of
It also occurs at turbo speed, e.g.: APP &quot;PROGNAME&quot;,8 loads the program starting at the end of
the previous one. For Append to be useful, the program to be appended should have line numbers
the previous one. For Append to be useful, the program to be appended should have line numbers
greater than the existing program.
greater than the existing program.


<P>
 
<b>AUTO</b> or <b>AUT</b> provides automatic line numbering as you type in a program, e.g.: AUTO 1000,10 starts
'''AUTO''' or '''AUT''' provides automatic line numbering as you type in a program, e.g.: AUTO 1000,10 starts
automatic line numbering at line 1000 and increments in steps of 10. To turn AUTO off, press
automatic line numbering at line 1000 and increments in steps of 10. To turn AUTO off, press
RETURN against a blank line. If you subsequently want to continue automatic numbering type AUTO
RETURN against a blank line. If you subsequently want to continue automatic numbering type AUTO
on its own and numbering will continue from the last line number which was automatically displayed.
on its own and numbering will continue from the last line number which was automatically displayed.
<p>
 
<b>FIND</b> or <b>FIN</b> will perform a search on the basic program currently in ram and when a line contains matches
'''FIND''' or '''FIN''' will perform a search on the basic program currently in ram and when a line contains matches
to the given string, it'll be returned as result.
to the given string, it'll be returned as result.
<pre>
 
Examples:  FIND REM
Examples:  FIND REM
            FIND 20
            FIND 20
            FIND POKE53282
            FIND POKE53282
            FIND LIVES
            FIND LIVES
</pre>


Exceptions apply like this: the given string will be tokenized and whenever it contains a basic keyword,
Exceptions apply like this: the given string will be tokenized and whenever it contains a basic keyword,
Line 599: Line 571:
ON in it. Putting the string into quotes won't help either, since they will be searched for as well. Also
ON in it. Putting the string into quotes won't help either, since they will be searched for as well. Also
note that FIND needs a SPACE right after the command.
note that FIND needs a SPACE right after the command.
<p>
 
<i>Please mail me about bugs concerning this specific command.</i>
'''BOOT''' will load a machine code file and jump to the first address loaded. E.G. You have a program
<p>
<b>BOOT</b> will load a machine code file and jump to the first address loaded. E.G. You have a program
which you would normally load with LOAD &quot;PROGNAME&quot;,8,1 followed by a SYS number. BOOT will perform
which you would normally load with LOAD &quot;PROGNAME&quot;,8,1 followed by a SYS number. BOOT will perform
the same function . NOTE that BOOT will only work when the program is started by SYSing to the
the same function . NOTE that BOOT will only work when the program is started by SYSing to the
first address loaded. Syntax: BOOT &quot;PROGNAME&quot;,8.
first address loaded. Syntax: BOOT &quot;PROGNAME&quot;,8.


<p>
'''PLIST''' will list any basic program directly from disk to a CBM printer (device 4), without overwriting
<b>PLIST</b> will list any basic program directly from disk to a CBM printer (device 4), without overwriting
the program in memory. Syntax: PLIST &quot;PROGNAME&quot;,8 . This command can also be used to print the directory
the program in memory. Syntax: PLIST &quot;PROGNAME&quot;,8 . This command can also be used to print the directory
PLIST&quot;$&quot;,8 . PLIST won't work with machine code and sequential files.
PLIST&quot;$&quot;,8 . PLIST won't work with machine code and sequential files.
<p>
<b>SLIST</b> is the same as PLIST except that output is to the screen.
<p>
<b>OFF</b> & <b>ON</b> - used to switch the disk turbo routines off and on.


<p>
'''SLIST''' is the same as PLIST except that output is to the screen.
<b>COPY</b> or <b>COP</b> will start the Filecopier. See <a href="#52">Section 5.2</a>.<br>
 
NOTE: @C is gone, it collided with @CP for CMD Drives and the original copy command from CBM.
'''OFF''' & '''ON''' - used to switch the disk turbo routines off and on.
<p>
 
<b>BACKUP</b> or <b>BAC</b> will start the Whole Disk Backup. See <a href="#53">Section 5.3</a>.<br>
'''COPY''' or '''COP''' will start the [[#DISK FILECOPIER|Disk Filecopier]].
 
'''BACKUP''' or '''BAC''' will start the [[#WHOLE DISK BACKUP|Whole Disk Backup]]


NOTE: @B is gone.
'''ZAP''' will reset the computer and disable the RR, just like Reset + CTRL Key.  
<p>
Locations $0000-$07ff will be corrupted but $0800 - $0803 is restored to enable running of machine  
<b>ZAP</b> will reset the computer and disable the RR, just like Reset + CTRL Key.  
Locations $0000-$07ff will be corrupted, and $0800 - $0803 is restored to enable running of machine  
language programs with a SYS header. Basic programs won't have the pointers set correctly,  
language programs with a SYS header. Basic programs won't have the pointers set correctly,  
so it may be necessary to re-load after the ZAP command. (or using normal reset?)
so it may be necessary to re-load after the ZAP command. (or using normal reset?)
<p>
 
<b><a name="renum">RENUM</a></b> or <b>REN</b> (64 kb only)<br>
'''RENUM''' or '''REN''' (64 kb only)
 
This command will renumber your basic program currently in memory. It takes two parameters separated  
This command will renumber your basic program currently in memory. It takes two parameters separated  
by a comma. These are the starting line number and the step size in which the line numbers are to be  
by a comma. These are the starting line number and the step size in which the line numbers are to be  
incremented.
incremented.
<pre>
Example: RENUM 1000,1
</pre>


<b><a name="tass">TASS</a></b> or <b>TAS</b> (64 kb only)<br>
Example: RENUM 1000,1
 
 
'''TASS''' or '''TAS''' (64 kb only)
This command simply copies a version of Turbo Assembler into ram from $9000-$cf00. A non-ram using  
This command simply copies a version of Turbo Assembler into ram from $9000-$cf00. A non-ram using  
version will be implemented soon. Checky is working on this.
version will be implemented soon. Checky is working on this.
<p>
 
<b>BASIC EXTENSION</b><br>
'''BASIC EXTENSION'''
Hex ($), binary (%) and octal (&amp;) numbers can also be included in basic expressions, e.g. SYS 49152  
Hex ($), binary (%) and octal (&amp;) numbers can also be included in basic expressions, e.g. SYS 49152  
could be entered as SYS $C000.
could be entered as SYS $C000.
<p>
<b><u><a name="67">6.7 - CENTRONICS PRINTER INTERFACE</a></u></b>
<p>


RR can drive a Centronics printer connected to the parallel port. If a parallel device is connected and
 
==Centronics Printer Interface==
 
''CyberpunX Replay'' can drive a Centronics printer connected to the parallel port. If a parallel device is connected and
active, any output to the printer (device 4) will automatically be sent to the parallel port. Note that  
active, any output to the printer (device 4) will automatically be sent to the parallel port. Note that  
you need a suitable connecting cable before you can use a parallel printer. The interface will normally  
you need a suitable connecting cable before you can use a parallel printer. The interface will normally  
perform any necessary character translation, including most graphic characters, but you can also send  
perform any necessary character translation, including most graphic characters, but you can also send  
untranslated characters or &quot;escape codes&quot; e.g. to change style and formatting.
untranslated characters or ''escape codes'' e.g. to change style and formatting.
<p>
 
To print a Basic program enter:
To print a Basic program enter:
<pre>
 
OPEN 4,4:CMD4:LIST
OPEN 4,4:CMD4:LIST
</pre>
 
When printing is complete enter
When printing is complete enter
<pre>
 
PRINT#4:CLOSE 4
PRINT#4:CLOSE 4
</pre>
 
To send special printer codes and untranslated characters you need to open a special channel (secondary
To send special printer codes and untranslated characters you need to open a special channel (secondary
channel 9). Here is an example:
channel 9). Here is an example:
<pre>
10 OPEN 4,4  : REM OPEN A NORMAL CHANNEL TO THE PRINTER
20 OPEN 9,4,9 : REM OPEN A COMMAND CHANNEL
30 PRINT#9,CHR$(27)+CHR$(87)+CHR$(1);: REM EXPANDED PRINT ON
40 PRINT#4,&quot;THE QUICK BROWN FOX&quot;


50 PRINT#9,CHR$(27)+CHR$(87)+CHR$(0);: REM EXPANDED PRINT OFF
10 OPEN 4,4  : REM OPEN A NORMAL CHANNEL TO THE PRINTER
60 PRINT#4,&quot;THE QUICK BROWN FOX&quot;
20 OPEN 9,4,9 : REM OPEN A COMMAND CHANNEL
70 CLOSE 4:CLOSE 9: REM CLOSE PRINTER CHANNELS
30 PRINT#9,CHR$(27)+CHR$(87)+CHR$(1);: REM EXPANDED PRINT ON
</pre>
40 PRINT#4,"THE QUICK BROWN FOX"
This short example should print &quot;THE QUICK BROWN FOX&quot; in double width characters and again
 
50 PRINT#9,CHR$(27)+CHR$(87)+CHR$(0);: REM EXPANDED PRINT OFF
60 PRINT#4,"THE QUICK BROWN FOX"
70 CLOSE 4:CLOSE 9: REM CLOSE PRINTER CHANNELS
 
This short example should print "THE QUICK BROWN FOX" in double width characters and again
in normal size characters. Note the semicolon (;) at the end of the command string - this prevents a
in normal size characters. Note the semicolon (;) at the end of the command string - this prevents a
carriage return from being sent at the end of the command string. Refer to your printer manual for
carriage return from being sent at the end of the command string. Refer to your printer manual for
details of other special commands. Most, but not all commands begin with the &quot;escape character&quot; CHR$(27). The interface prints
details of other special commands. Most, but not all commands begin with the ''escape character'' '''CHR$(27)'''. The interface prints
according to the screen mode - you switch between &quot;Business&quot; and &quot;Graphics&quot; modes
according to the screen mode - you switch between "Business" and "Graphics" modes
by pressing SHIFT & CBM together.
by pressing SHIFT & CBM together.


<p>
If you find that everything gets printed on the same line, you need to set a special DIP Switch on  
If you find that everything gets printed on the same line, you need to set a special DIP Switch on  
your printer to make the paper move down at the end of each line (a Linefeed). Again, refer to your  
your printer to make the paper move down at the end of each line (a Linefeed). Again, refer to your  
printer manual. If your printer cannot do this, you can send a special command to Retro Replay which  
printer manual. If your printer cannot do this, you can send a special command to ''CyberpunX Replay'' which  
forces a linefeed with each carriage return:
forces a linefeed with each carriage return:
<p>
 
@PLF - causes a linefeed to be sent with every carriage return.<br>
@PLF - causes a linefeed to be sent with every carriage return.
<p>
 
You can also print characters direction with @P, e.g.
You can also print characters direction with @P, e.g.
<pre>
@P&quot;THE QUICK BROWN FOX&quot;


@P 27,87,1 &quot;THE QUICK BROWN FOX&quot; 27,87,0 &quot;THE QUICK BROWN FOX'&quot;
@P"THE QUICK BROWN FOX"
@P 27,87,1 "THE QUICK BROWN FOX" 27,87,0 "THE QUICK BROWN FOX"
 


</pre>
The second example does the same as the Basic program listed above. Note how you can mix command  
The second example does the same as the Basic program listed above. Note how you can mix command  
sequences and strings on the same line.
sequences and strings on the same line.
<p>
 
The @P command works in Direct mode, or in the Machine Code
The @P command works in Direct mode, or in the Machine Code
Monitor, but not from within a program.
Monitor, but not from within a program.
<pre>
@P* - dumps the entire text content of the screen.


@P** - works in the Freeze Monitor, it dumps the frozen screen.
@P* - dumps the entire text content of the screen.
</pre>
<i>Hope all of these printer commands still work. Someone test and let me know!</i>
@P** - works in the Freeze Monitor, it dumps the frozen screen.
<p>
 
<hr size=2 noshade width=90%>
''Hope all of these printer commands still work. Someone test and let me know!''
<p>
 
<h3><a name="70">7. MACHINE CODE MONITOR</a></h3>
----
<p>
 
Retro Replay includes a powerful extended Machine Code Monitor. To call the Monitor from Fastload,  
=Machine Code Monitor=
enter MON or press F8. The Monitor is also available from the Freeze Menu. In this mode all of the memory
 
''CyberpunX Replay'' includes a powerful extended Machine Code Monitor. To call the Monitor from Fastload,  
enter '''MON''' or press '''F8'''. The Monitor is also available from the Freeze Menu. In this mode all of the memory
including the screen, stack and zero page may be examined in its condition at the point at which the program
including the screen, stack and zero page may be examined in its condition at the point at which the program
was frozen.
was frozen.
<P>


All 64K of memory remains unaffected by the Freeze Monitor. Any alterations made will be incorporated
All 64K of memory remains unaffected by the Freeze Monitor. Any alterations made will be incorporated
Line 722: Line 686:
notation is required by the user, if the Monitor is to be used effectively. Some of the Monitor instructions
notation is required by the user, if the Monitor is to be used effectively. Some of the Monitor instructions
can cause the system to crash if the user is not fully aware of what is going on.
can cause the system to crash if the user is not fully aware of what is going on.
<p>
 
<i>See additional notes to the commands in <a href="#72">Section 7.2</a></i>
 
<p>
==Command Summary==
<b><u><a name="71">7.1 - COMMAND SUMMARY</a></u></b>
 
<p>
A      - Assemble.
<pre>
B      - Execute a Basic command.
A      - Assemble.
C      - Compare memory.
B      - Execute a Basic command.
D      - Disassemble.
C      - Compare memory.
F      - Fill memory.
D      - Disassemble.
G      - Go. Execute program as per register display.
F      - Fill memory.
H      - Hunt for byte/text-sequence.
G      - Go. Execute program as per register display.
IO    - Displays I/O registers (freeze mode only).
H      - Hunt for byte/text-sequence.
I      - Interpret memory as CBM codes. Acts as I* now.
IO    - Displays I/O registers (freeze mode only).
I*    - Interpret memory as CBM codes. As usual.
I      - Interpret memory as CBM codes. Acts as I* now.
J      - Interpret memory as ASCII codes. Former I function.
I*    - Interpret memory as CBM codes. As usual.
L      - Load.
J      - Interpret memory as ASCII codes. Former I function.
M      - Display memory in Hex.
L      - Load.
N      - Number conversion.
M      - Display memory in Hex.
P      - (prefix).  Direct output to the printer (device 4).
N      - Number conversion.
R      - Display registers at entry or freeze time.
P      - (prefix).  Direct output to the printer (device 4).
S      - Save.
R      - Display registers at entry or freeze time.
T      - Transfer memory.
S      - Save.
U      - User function.
T      - Transfer memory.
V      - Verify.
V      - Verify.
W      - Watch Freeze/BreakPoints.
W      - Watch Freeze/BreakPoints.
X      - Exit to Basic or Freeze Menu.
X      - Exit to Basic or Freeze Menu.
*      - Toggle RAM/ROM modes.
*      - Toggle RAM/ROM modes.
@      - Read error channel or send disk command.
@      - Read error channel or send disk command.
@(dev) - Changes device and display status.
@(dev) - Changes device and display status.
@#(dev)- Only changes device.
@#(dev)- Only changes device.
$      - Display directory.
$      - Display directory.
 
</PRE>
Special disk related commands only available in MON:
Special disk related commands only available in MON:
<PRE>
@*8    - Access drive memory (device 8).
@*8    - Access drive memory (device 8).
@*9    - Access drive memory (device 9).
@*9    - Access drive memory (device 9).
@*    - Return access to computer memory.
@*    - Return access to computer memory.
@ME    - Execute memory in disk drive.
@ME    - Execute memory in disk drive.
@BR    - Read a disk sector into computer memory.
@BR    - Read a disk sector into computer memory.
@BW    - Write a sector from computer memory to disk.
@BW    - Write a sector from computer memory to disk.
 
</pre>
'''Note:'''
<p>
Whenever using one of the commands to edit memory locations, just go over the line, edit as needed and hit
 
* '''RETURN''' to accept the changes.
* '''CBM+Return''' accept the changes, keep you in editmode and present the next editable line to you.
* '''SHIFT+RETURN''' leaves editmode without accepting changes.
 
==Command Description==
 
'''Important Notes:'''


<B>Note:</B><BR><BR>
Whenever using one of the commands to edit memory locations,
just go over the line, edit as needed and hit RETURN to accept the changes.<BR>
<B>CBM+Return</B> will keep you in this editmode and present the next editable
line to you. Simple Return accepts the changes and leaves editmode. <B>SHIFT+RETURN</B>
leaves editmode without accepting changes.
<p>
<b><u><a name="72">7.2 - DESCRIPTION OF COMMANDS</a></u></b>
<p>
<b>Important Notes:</b><BR>
When an end address is specified it should be exclusive.
When an end address is specified it should be exclusive.
The end address is one Byte greater than the last address to be
The end address is one Byte greater than the last address to be
Line 796: Line 757:
           I 3000 -    - asciidump from $3000 to xxx
           I 3000 -    - asciidump from $3000 to xxx
</PRE>
</PRE>
<b>1) EXAMINING MEMORY.</b><br>
'''1) EXAMINING MEMORY.'''
 
Memory may be examined in Hex/ASCII, Disassembly, or Interpreted as ASCII or screen codes:
Memory may be examined in Hex/ASCII, Disassembly, or Interpreted as ASCII or screen codes:
<PRE>
<PRE>
Line 806: Line 768:
.M C000-    - display memory from $C000 onwards.
.M C000-    - display memory from $C000 onwards.
.D          - disassemble from the current address onwards.
.D          - disassemble from the current address onwards.
.I          - interpret Screen Codes from the current address.
.I*          - interpret Screen Codes from the current address.
.I*          - interpret Screen Codes from the current address.
.J          - interpret ASCII from the current address.
.J          - interpret ASCII from the current address.
</PRE>
</PRE>
<i>This acts as former <b>I</b> now and displays memory in ASCII format. Most PPL use <b>I*</b> all
''The '''J''' acts as former plain '''I''' now and displays memory in ASCII format.''
the time anyways. I took a glance at the excellent DreaMon and it handles this in a similar way.</i>
 
<P>
The display can be controlled in two ways:
The display can be controlled in two ways:
<P>
 
a) Function keys F5 and F7 cause continual scrolling up or down respectively. Set for fast scanning through
a) Function keys F5 and F7 cause continual scrolling up or down respectively. Set for fast scanning through
memory. Any other key will stop or start the display. F5 and F7 change the direction of the scroll. STOP or
memory. Any other key will stop or start the display. F5 and F7 change the direction of the scroll. STOP or
CURSOR DOWN returns to the input prompt.<br>
CURSOR DOWN returns to the input prompt.
 
b) Cursor Up and Cursor Down will scroll the display by one line at the top or bottom of the screen and
b) Cursor Up and Cursor Down will scroll the display by one line at the top or bottom of the screen and
return to input prompt. Best for editing. Memory may be altered - type over any byte, code or mnemonic and
return to input prompt. Best for editing. Memory may be altered - type over any byte, code or mnemonic and
press RETURN. A question mark indicates an error.
press RETURN. A question mark indicates an error.
<p>


<b>2) BANK SWITCHING. </b><br>
 
'''2) BANK SWITCHING. '''
 
On entry, the Monitor is in RAM mode - all systems ROM's are switched out during memory access. To access
On entry, the Monitor is in RAM mode - all systems ROM's are switched out during memory access. To access
the ROM's and I/O devices, use the * command, which toggles between the two modes.
the ROM's and I/O devices, use the * command, which toggles between the two modes.
<p>
 
In normal Monitor mode this also enables the cart ROM mirroring. I* 8000 will show you a dump of that
In normal Monitor mode this also enables the cart ROM mirroring. I* 8000 will show you a dump of that
area. (Usually bank 1 as that's where the monitor and toolkit routines mainly work.)
area. (Usually bank 1 as that's where the monitor and toolkit routines mainly work.)
<P>
 
In FREEZE monitor mode this command also enables mirroring of $0000 to
In FREEZE monitor mode this command also enables mirroring of $0000 to
$09ff of the Cartridge RAM (!). (Written in this etext originally
$09ff of the Cartridge RAM (!). (Written in this etext originally
Line 838: Line 802:
                           corrupted, and flawlessly restarting the frozen program is possible.
                           corrupted, and flawlessly restarting the frozen program is possible.
</pre>
</pre>
<b>3) ASSEMBLY.</b>
 
 
'''3) ASSEMBLY.'''
<pre>
<pre>
.A C000 LDA #$01
.A C000 LDA #$01
Line 844: Line 810:
Assemble an instruction in standard 6502 mnemonics at $C000. The next memory address will be displayed
Assemble an instruction in standard 6502 mnemonics at $C000. The next memory address will be displayed
ready for the next instruction.
ready for the next instruction.
<p>


<i>Before you had to enter the $ all the time to assemble properly. Now the monitor assumes Hex all the time.</i>
 
''Before you had to enter the $ all the time to assemble properly. Now the monitor assumes Hex all the time.''
<pre>
<pre>
  LDA 01    will turn into LDA $01
  LDA 01    will turn into LDA $01
Line 853: Line 819:
  etc...
  etc...
</pre>
</pre>
<b>4) REGISTER DISPLAY.</b>
 
 
'''4) REGISTER DISPLAY.'''
<pre>
<pre>
.R
.R
Line 860: Line 828:
Status register is displayed in Binary. Alter registers by typing over the relevant byte or flag (and
Status register is displayed in Binary. Alter registers by typing over the relevant byte or flag (and
hit return on that line).
hit return on that line).
<p>
 
<b>5) FILL MEMORY</b>
 
'''5) FILL MEMORY'''
<pre>
<pre>
.F C000 D000 AA
.F C000 D000 AA
</pre>
</pre>
Fill memory from $C000 to $D000 with the byte $AA.
Fill memory from $C000 to $D000 with the byte $AA.
<p>
 
<i>Now supports pattern fill as well.</i>
''Now supports pattern fill as well.''
<pre>
<pre>
  .F C000 D000 &quot;count zero rules da memory!!!&quot;
  .F C000 D000 &quot;foobar!!!&quot;
  .F C000 D000 ee 20 d0
  .F C000 D000 ee 20 d0
</pre>
</pre>
<b>6) HUNT MEMORY</b>
 
 
'''6) HUNT MEMORY'''
<pre>
<pre>
.H C000 D000 01 02 03
.H C000 D000 01 02 03
.H C000 D000 &quot;STRING&quot;
.H C000 D000 &quot;STRING&quot;
Line 883: Line 852:
Hunt through memory for a sequence of bytes or an ASCII string. If any occurrence is detected, the address
Hunt through memory for a sequence of bytes or an ASCII string. If any occurrence is detected, the address
will be displayed.
will be displayed.
<p>
 
<i>Wildcard hunt added.</i>
''Wildcard hunt added.''
Hunt is using a certain priority to search memory. Wildcard hunt as well as ordinary pattern hunt are
Hunt is using a certain priority to search memory. Wildcard hunt as well as ordinary pattern hunt are
only performed when no stacking is done. In this example, only the string search will be performed:
only performed when no stacking is done. In this example, only the string search will be performed:
Line 893: Line 862:
Only on the disk command Scratch, filename stacking is a good idea sometimes.
Only on the disk command Scratch, filename stacking is a good idea sometimes.


<p>
 
<b>7) COMPARE</b>
'''7) COMPARE'''
<pre>
<pre>
.C C000 D000 E000
.C C000 D000 E000
Line 900: Line 869:
Compare the area of memory from $C000 to $D000 with memory starting at $E000. If there is any discrepancy,
Compare the area of memory from $C000 to $D000 with memory starting at $E000. If there is any discrepancy,
the memory locations will be displayed together with the bytes at those locations.
the memory locations will be displayed together with the bytes at those locations.
<p>
 
<i>This has optimized and colored output now.</i>
''This has optimized and colored output now.''
<p>
 
<b>8) TRANSFER MEMORY</b>
 
'''8) TRANSFER MEMORY'''
<pre>
<pre>
.T C000 D000 E000
.T C000 D000 E000
Line 910: Line 880:
transfer - memory areas may overlap and may be moved either up or down in memory.
transfer - memory areas may overlap and may be moved either up or down in memory.


<p>
 
<b>9) GO</b>
'''9) GO'''
<pre>
<pre>
.G C000
.G C000
Line 917: Line 887:
Load registers as per the register display and start executing the machine code program starting at
Load registers as per the register display and start executing the machine code program starting at
$C000. The program may end with either a BRK or an RTS instruction.
$C000. The program may end with either a BRK or an RTS instruction.
<p>
 
<b>10) NUMBER CONVERSION</b>
 
'''10) NUMBER CONVERSION'''
<pre>
<pre>
.N $C000
.N $C000
Line 929: Line 900:
Displays the result of an expression in HEX, DECIMAL and BINARY. If the expression is a single byte
Displays the result of an expression in HEX, DECIMAL and BINARY. If the expression is a single byte
value, a PETASCII character is displayed.
value, a PETASCII character is displayed.
<p>
<b>11) OUTPUT TO PRINTER</b>


'''11) OUTPUT TO PRINTER'''
<pre>
<pre>
.PM C000 D000
.PM C000 D000
Line 938: Line 909:
P is used as a prefix to another command. Memory display will be directed to the printer (device 4).
P is used as a prefix to another command. Memory display will be directed to the printer (device 4).
Hold STOP to quit.
Hold STOP to quit.
<p>
 
<b>12) EXECUTE A BASIC COMMAND</b>
 
'''12) EXECUTE A BASIC COMMAND'''
<pre>
<pre>
.BPRINT 8*256
.BPRINT 8*256
.BPRINT &quot;TEST&quot;
.BPRINT &quot;TEST&quot;
.BPLIST            <i>DOES THIS WORK ? I have no printer :)</i>
.BPLIST            ''DOES THIS WORK ? I have no printer :)''
</pre>
 
 
'''13) EXECUTE A USER FUNCTION'''
Using this function, you can change a memory area to your own needs. The syntax is:
 
<pre>
U <start> <end> <list_of_opcodes>
</pre>
 
Basically, the list of opcodes is a small subroutine which will be accessed
for every byte in that memory area. The original byte comes in the accumulator
and the modified value has also to be in the accu. You don't have to specify an RTS
or something.
 
So, this routine will invert the memory from $1000 to $1fff (49 FF = EOR #$FF):
 
<pre>
U 1000 2000 49 FF
</pre>
 
This routine will shift the high-nybbles into the low-nybbles (4A = LSR A):
 
<pre>
U 1000 2000 4A 4A 4A 4A
</pre>
</pre>


This function only works with ordinary Basic commands, not the extension commands. Only the first basic
Before each call of the subroutine, the carry-flag is cleared. The X-Register
command will be executed.
will be set to 0 before the very first call and can then be used freely.
<p>
 
<b>13) LOAD, SAVE & VERIFY</b>
''Y-register must be 0 on exit, better don't touch it!''
 
 
Using the X-Register you can easily watch a charset, for example (8A E8 = TXA; INX):
 
<pre>
U 0400 0500 8A E8
</pre>
 
 
As you can see, this is a powerful option giving you a lot of possibilities. But
really think twice before pressing enter, a wrong opcode might lead to a serious
crash and/or loss of data, of course!
 
 
'''''Ninja''' added this nice function on very early 3.8 ROMs already - blame Count for
the late documentation!''
 
 
'''14) LOAD, SAVE & VERIFY''' (FIXME)
<pre>
<pre>
.L&quot;PROGNAME&quot;
.L&quot;PROGNAME&quot;
Line 956: Line 972:
.S&quot;PROGNAME&quot;,8,C000,D000,E000
.S&quot;PROGNAME&quot;,8,C000,D000,E000
.V&quot;PROGNAME&quot;
.V&quot;PROGNAME&quot;
</pre>
</pre>
Load, Save, Verify. If a load address is specified, the program will be loaded to that location, otherwise
Load, Save, Verify. If a load address is specified, the program will be loaded to that location, otherwise
Line 962: Line 977:
be one byte after the last address to be saved. If an additional address is added to the save addresses,
be one byte after the last address to be saved. If an additional address is added to the save addresses,
this will be saved as the reload address of the program (disk only). All disk I/O uses RAM locations.
this will be saved as the reload address of the program (disk only). All disk I/O uses RAM locations.
<p>
 
NOTE: You cannot load and save memory below $0800 if the Monitor was entered from the Freeze Menu.
NOTE: You cannot load and save memory below $0800 if the Monitor was entered from the Freeze Menu.
<p>
 
<i>It is possible to save that area using the Memory Saver in freezer's Saveland now. Remember that the
''It is possible to save that area using the Memory Saver in freezer's Saveland now. Remember that the
ending address is exclusive. You may save address $FFFF by using $0000 as the ending address.  
ending address is exclusive. You may save address $FFFF by using $0000 as the ending address.  
(I prefer to set IRQ's manually.)</i>
(I prefer to set IRQ's manually.)''
<pre>
<pre>
.S&quot;NAME&quot;,8,0800,0000
.S&quot;NAME&quot;,8,0800,0000
</pre>
</pre>
NOTE: Tape accesses are <B>avoided</B> by the monitor now.
NOTE: Tape accesses are '''avoided''' by the monitor now.
<p>


<b>14) I/O REGISTERS</b>
 
'''15) I/O REGISTERS'''
<pre>
<pre>
.IO
.IO
Line 980: Line 995:
Displays the I/O registers $DC00-$DC0F,$DD00-$DD0F & $D000-$D02E. Any alternations will be incorporated
Displays the I/O registers $DC00-$DC0F,$DD00-$DD0F & $D000-$D02E. Any alternations will be incorporated
on Restart or Backup. This command only works if the Monitor was called from the Freeze Menu.
on Restart or Backup. This command only works if the Monitor was called from the Freeze Menu.
<p>
 
<b>15) WATCH FREEZE/BREAK-POINTS</b>
 
'''16) WATCH FREEZE/BREAK-POINTS'''
<pre>
<pre>
.W
.W
Line 987: Line 1,003:
Displays the memory locations of the Freeze- and Break-Points and only works in freeze mode monitor.
Displays the memory locations of the Freeze- and Break-Points and only works in freeze mode monitor.
Freezepoints are displayed in white color, Breakpoints in gray color. Disassembling freezepoints will
Freezepoints are displayed in white color, Breakpoints in gray color. Disassembling freezepoints will
show you the obligatory JSR $DFD3. Having it set using the SF command and restarting will restart at
show you the obligatory JSR $Dxxx. Having it set using the SF command and restarting will restart at
the location where the $DFD3 was hit. When setting it manually in a program with the assemble  
the location where the $Dxxx was hit. When setting it manually in a program with the assemble  
command the next command will be executed after restart.
command the next command will be executed after restart.
<p>
<i>Hope this is somewhat clear, at least to the pros.</i>


<p>
''Hope this is somewhat clear, at least to the pros.''
<b><u><a name="73">7.3 DISK MONITOR FUNCTIONS.</a></u></b>
 
<p>
==Disk Monitor Functions==
 
In monitor mode all the usual disk command options work as normal. This includes device changing using  
In monitor mode all the usual disk command options work as normal. This includes device changing using  
@(device) and @#(device). Output for the error channel using @ was changed a little to save display space.
@(device) and @#(device). Output for the error channel using @ was changed a little to save display space.
The monitor mode also has some additional functions, described below.
The monitor mode also has some additional functions, described below.
<p>
 
<b>Access drive memory</b>
'''Access drive memory'''
<pre>
 
Syntax: @* (read device) (write device)
Syntax: @* (read device) (write device)
</pre>
 
Device 0 indicates that the &quot;device&quot; is computer Ram. If no write device is specified, the write device will
Device 0 indicates that the "device" is computer RAM. If no write device is specified, the write device will
be set to the read device number. If no parameters are specified, then the monitor reverts to its default
be set to the read device number. If no parameters are specified, then the monitor reverts to its default
(read and write to computer Ram).
(read and write to computer RAM).
<pre>
 
Examples:
Examples:
  @*8  Read and write to device 8.
  @*8  Read and write to device 8.
  @*89  Read from device 8, write to device 9.
  @*89  Read from device 8, write to device 9.
  @*80  Read from device 8, write to computer Ram.
  @*80  Read from device 8, write to computer RAM.
  @*08  Read from computer Ram, write to device 8.
  @*08  Read from computer RAM, write to device 8.
  @*    Return to default.
  @*    Return to default.


</pre>
All the Monitor's memory access commands can be used with drive memory. Memory can be transferred between
All the Monitor's memory access commands can be used with drive memory. Memory can be transferred between
devices by setting up the required parameters before using the T command.
devices by setting up the required parameters before using the '''T''' command.
<p>
 
<i>As this is a real hardcore hack option, I decided to not mess with the line parsing AGAIN and limit this
''As this is a real hardcore hack option, I decided to not mess with the line parsing AGAIN and limit this
to devices 8 and 9. Devices 10-30 are not possible here.</i>
to devices 8 and 9. '''Devices 10-30 are not possible here.'''''
<p>
 
<b>OTHER DISK COMMANDS</b>
==Other Disk Commands==
<pre>
 
@ME (address) - executes a program in drive memory.
@ME (address) - executes a program in drive memory.
@BR (TRACK) (SECTOR) (MEMORY PAGE).
@BR (TRACK) (SECTOR) (MEMORY PAGE).
@BW (TRACK) (SECTOR) (MEMORY PAGE).
@BW (TRACK) (SECTOR) (MEMORY PAGE).
</pre>
 
These are block read and write commands. If no memory page is specified, then page $CF will be used.
These are block read and write commands. If no memory page is specified, then page $CF (=$CF00) will be used.
<pre>
 
@BR 12 01 40 - Read track 18, sector 1 to page $4000.
@BR 12 01 40 - Read track 18, sector 1 to page $4000.
@BW 11 00 40 - Write page $40 to track 17, sector 0.
@BW 11 00 40 - Write page $40 to track 17, sector 0.
</pre>
@BR +18,+1,40 - same as the first example.
You can specify decimal notation for the track and sector numbers by prefixing with the + character.
Separate the parameters with a comma.
You can specify decimal notation for the track and sector numbers by prefixing with the + character.
<pre>
Separate the parameters with a comma when using decimals.
 
 
Take care when writing a disk block - if you accidentally specify the wrong parameters, you cand easily trash
the disk!
 
''These routines should work fine on devices 8-30.''
 
 
==Freeze & Break Points==
 
Please read [[#Appendix C|Appendix C]] aswell about different cartridge RAM configurations.


@BR +18,+1,40 - same as the above example.
</pre>
Take care when writing a disk block - if you accidentally specify the wrong parameters, you could trash
the disk.
<p>
<i>These routines should work fine on devices 8-30.</i>
<p>
<b><u><a name="74">7.4 - FREEZE & BREAK POINTS</a></u></b>
<p>
Please read <a href="#appc">HERE</A> aswell about different cartridge RAM configurations.
<p>
From the Freeze Monitor, you can set explicit Freeze and Break points in a program. Up to five Freeze or
From the Freeze Monitor, you can set explicit Freeze and Break points in a program. Up to five Freeze or
Break points can be set, which are cleared when program control passes to the Monitor. Following are the Freeze
Break points can be set, which are cleared when program control passes to the Monitor. Following are the Freeze
and Break instructions:
and Break instructions:


<pre>
 
SF - Set Freeze Point
SF - Set Freeze Point
SZ - Set Break Point
SZ - Set Break Point
RF - Remove Freeze Point
RF - Remove Freeze Point ('''formerly CF''')
RZ - Remove Break Point
RZ - Remove Break Point ('''formerly CB''')
</pre>
 
To set a Freeze or Break point, disassemble the required part of the program, and type the command at the
To set a Freeze or Break point, disassemble the required part of the program, and type the command at the
address at which the program should be interrupted.
address at which the program should be interrupted.
<pre>
.> C000 A9 41    LDA #$41
.> C002 20 D2 FF JSR $FFD2
.> C005 60      RTS


.> C002 SF D2 FF JSR $FFD2 &lt;RETURN&gt;   ;Modify location $C002
.> C000 A9 41    LDA #$41
.> C002 20 D3 DF JSR $DFD3            ;Freeze Point is set
.> C002 20 D2 FF JSR $FFD2
</pre>
.> C005 60      RTS
.> C002 '''SF''' D2 FF JSR $FFD2 >RETURN<   ;Modify location $C002
.> C002 20 D3 DF JSR $DFD3            ;Freeze Point is set
 
Control will pass to the Freeze Monitor at address $C002 and the original instruction (JSR $FFD2) is
Control will pass to the Freeze Monitor at address $C002 and the original instruction (JSR $FFD2) is
restored.
restored.
<p>
 
You can explicitly clear a Freeze or Break point by typing RF or RZ at the address.
You can explicitly clear a Freeze or Break point by typing RF or RZ at the address.
<p>
 
<i>A Break point may also be referred to as a Zero Point. The use of CF, CB, and SB interfered with the
''A Break point may also be referred to as a Zero Point. The use of CF, CB, and SB interfered with the
opcodes CLI, CLV, CLD, CLC, and SBC, and were changed therefore.</i>
opcodes CLI, CLV, CLD, CLC, and SBC, and were changed therefore.''
<p>
 


Freeze and Break points act exactly as if you had pressed the freeze button, but you can precisely
Freeze and Break points act exactly as if you had pressed the freeze button, but you can precisely
control the point at which the program is frozen. Breaks pass through the IRQ vector at $FFFE and the
control the point at which the program is frozen. Breaks pass through the IRQ vector at $FFFE and the
break vector at $0316, so they are not suitable for programs which modify these vectors.
break vector at $0316, so they are not suitable for programs which modify these vectors.
<p>
 
Freeze points don't use these vectors, so they are particularly useful for programs (e.g. most games) which
Freeze points don't use these vectors, so they are particularly useful for programs (e.g. most games) which
switch out the kernal ROM. However, because they use three bytes of code, you need to be careful not to
switch out the kernal ROM. However, because they use three bytes of code, you need to be careful not to
place a Freeze at a point where program control may hit the second or third bytes of the freeze instruction,
place a Freeze at a point where program control may hit the second or third bytes of the freeze instruction,
or you will crash the machine. The I/O ROM ($D000) must also be switched in.
or you will crash the machine. The I/O ROM ($D000) must also be switched in.
<p>
 
Freeze points can be set only from the Freeze Monitor. You can directly place a freeze instruction (JSR $DFD3)  
Freeze points can be set only from the Freeze Monitor. You can directly place a freeze instruction (JSR $DFD3)  
using either the Monitor (in which case it will act as a subroutine, calling the Freeze Monitor and returning to
using either the Monitor (in which case it will act as a subroutine, calling the Freeze Monitor and returning to
the next instruction), or you can call the freezer from a Basic program with SYS 57299. On restart, the program
the next instruction), or you can call the freezer from a Basic program with SYS 57299. On restart, the program
will continue.<BR>
will continue.
( Warning ! On REU-compatible RR-ROMs, the mentioned adress changes ! What to use exactly, please see from
 
  setting a freezepoint with the SF command in freeze-monitor.)
( Warning ! On REU-compatible RR-ROMs, the mentioned adress changes ! What to use exactly, please see from setting a freezepoint with the SF command in freeze-monitor.)
 


<p>
Remember - if you find that a program will not load when the cartridge is plugged in - switch the computer
Remember - if you find that a program will not load when the cartridge is plugged in - switch the computer
off and on, and select NORMAL RESET instead of configuring the memory, before loading the program.
off and on, and select NORMAL RESET instead of configuring the memory, before loading the program.
<p>
<i>As an expert I gotta say: Remember - Always clear your ram, but that would differ from the last
sentence, hm? :)</i>
<p>
<hr size=2 noshade width=90%>
<p>
<h3><a name="80">Miscellaneous Tips</a></h3>


<p>
''As an expert I gotta say: Remember - Always clear your ram, but that would differ from the last
sentence, hm? :)''
 
----
 
=Miscellaneous Tips=
 
 
Here are some under-documented functions and things to know.
Here are some under-documented functions and things to know.
<p>
 
<u>NOTES FOR THE 1571 DRIVE</u>
 
<p>
==1571 Drive Notes==
 
Switch to double sided mode with the following.
Switch to double sided mode with the following.
<pre>
<pre>
Line 1,121: Line 1,136:
The drive powers up in 1541 mode when connected to a 64, so enter the command
The drive powers up in 1541 mode when connected to a 64, so enter the command
mentioned before if you wish to use double sided mode.
mentioned before if you wish to use double sided mode.
<p>
 
NOTE: Side two of a double-sided disk cannot be read by a 1541 drive.
NOTE: Side two of a double-sided disk cannot be read by a 1541 drive.
<p>
 
<u>NOTES FOR THE 1581 DRIVE</u>
 
<p>
==1581 Drive Notes==
 
Some samples of this drive are not very happy when working with a 64  
Some samples of this drive are not very happy when working with a 64  
or 128 in 64 mode. If you find that the system hangs when reading the  
or 128 in 64 mode. If you find that the system hangs when reading the  
Line 1,139: Line 1,155:
</pre>
</pre>


<i>Burning a new drive rom for the 1581 usually fixes this problem. Sometimes
''Burning a new drive rom for the 1581 usually fixes this problem. Sometimes
replacing the controller is needed, but getting these is hard. Also the 1581
replacing the controller is needed, but getting these is hard. Also the 1581
JiffyDOS works fine with the Retro Replay Fastloader.</i>
JiffyDOS works fine with the CyberpunX Replay Fastloader.''
<p>
 
<i>IMHO Retro Replay &amp; JiffyDOS on all devices is one of the best stock compatible
 
systems I know.</i>
==FIXME==
<p>
 
<u>FASTLOAD turbos & interfaces</u>
===FASTLOAD Turbos & Interfaces===
<p>
 
FASTSAVE & DISKCOPY use an interleave of 8.
FASTSAVE & DISKCOPY use an interleave of 8.
<p>
 
The CENTRONICS interface emulates channel 4 & 5 serial
The CENTRONICS interface emulates channel 4 & 5 serial
printers. If you have both serial & centronics printers the
printers. If you have both serial & centronics printers the
Line 1,157: Line 1,173:
printed.
printed.


<p>
 
<u>FASTLOAD & TOOLKIT</u>
===FASTLOAD & TOOLKIT===
<p>
 
If your filename in save was &quot;*&quot; the program will be named &quot;&quot;.
If your filename in save was &quot;*&quot; the program will be named &quot;&quot;.
To get rid of it again, use @s: without name as well.
To get rid of it again, use @s: without name as well.
Line 1,165: Line 1,181:
You should only do this to the first program on disk, to be able
You should only do this to the first program on disk, to be able
to load it back using &quot;:*&quot; as filename ...
to load it back using &quot;:*&quot; as filename ...
<p>
 
Never try to access location $DE00-$DEFF, because internal
Never try to access location $DE00-$DEFF, because internal
configuration register latch up by any read or write command.
configuration register latch up by any read or write command.
This means, that data currently on the bus will trash the $de00 register.
This means, that data currently on the bus will trash the $de00 register.
<p>


<i>This is the notorious $DExx-read bug on old Action Replay hardware. This
 
bug is fixed on the RR-hardware.</I>
''This is the notorious $DExx-read bug on old Action Replay hardware. This
<p>
bug is fixed on the RR-hardware.''
<hr size=2 noshade width=90%>
 
<p>
 
<h3><a name="appa">Appendix A</a> - 64 kb only features.</h3>
----
<p>
=Appendix A=
==64 kb only features==
 
Features which are only available on the 64 kb version of the rom:
Features which are only available on the 64 kb version of the rom:
<pre>
SILVERSURFER - <a href="silversurfer/ar_silversurfer.html" target="mainframe">SilverSurfer</A> capabilities are only available on new RR hardware.<BR>


FREEZE TURBO LOAD - New RR hardware has more RAM and therefore allows real turbo-speed on load while being in freezer.<BR>
* [[RR-Net]]
TASS - <a href="#tass">Turbo Assembler</a><br>
* [[SilverSurfer]]
</pre>
* ''RAMLOAD'' in freezer. New RR hardware has more RAM and therefore allows real turbo-speed on load while being in freezer.
TASS is only available as plain RAM version on all Beta 3.x 64kb versions!
* TASS
The 64kb ROM version supplied with Retro Replay hardware contains the TOOL
** TASS is only available as plain RAM version on all ''CyberpunX Replay'' 3.x 64kb versions!
command and therefore had no space for TASS. Flash the latest 64kb version
 
to get TASS working. Future ROMs (after 4.x) will most likely contain the
----
new TASS Macro ROM-based version.
=Appendix B=
<p>
==Programming Tips==
<hr size=2 noshade width=90%>
 
<p>
<h3><a name="appb">Appendix B</a> - Programming Tips.</h3>
<p>
Many people know this:
Many people know this:
<pre>


  sei
  sei
Line 1,202: Line 1,213:
  sta $de00
  sta $de00
  jmp $fce2
  jmp $fce2
</pre>
 
This routine will take you straight to the powerup menu of
This routine will take you straight to the powerup menu of
the cart and is a rather nice way to quit your programs.
the cart and is a rather nice way to quit your programs.
LDA #$08 will take you straight to the Fastload Toolkit.
''LDA #$08'' will take you straight to the Fastload Toolkit.
If no Retro Replay is present, a normal Reset will be performed.
If no Replay is present, a normal Reset will be performed.
<p>
 
I have been looking around in the sources to find useful routines
We have been looking around in the sources to find useful routines but none were found we would recommend.
which can be used without much danger, but there were
'''It is not appreciated to use cartridge ROM routines as they are moving during releases!'''
only two I found useful.
 
<pre>
==Utilising the Retro Replay RAM==
sei
 
lda #$10
sta $de00; switch bank 2 on
jsr $8118; Dir Rout
lda #$0a
sta $de00; switch back to basic extension bank 1
cli
rts
</pre>
This program will display the directory using the internal
cart routine. $BA needs to have the device number set correctly.
Changing the JSR to $811B will display the device status.
<p>
Utilising the Retro Replay RAM:
<p>
First a short note about the RAM Configuration. While being
First a short note about the RAM Configuration. While being
in Basic Toolkit the first bank of the cartridge is usually switched
in Basic Toolkit the first bank of the cartridge is usually switched
Line 1,234: Line 1,231:
to use the additional RAM and I really hope some people come up with
to use the additional RAM and I really hope some people come up with
new interesting programs using the ram.
new interesting programs using the ram.
<pre>
 
  sei
  sei
  lda #$23
  lda #$23
  sta $de00  ; turns RAM on at $8000, ROM Bank 0 at $e000
  sta $de00  ; turns RAM on at $8000, ROM Bank 0 at $e000
             ; use LDA #$20 to only turn on RAM at $8000
             ; use LDA #$20 to only turn on RAM at $8000
 
... do your stuff here ...
... do your stuff here ...
 
  lda #$0a
  lda #$0a
  sta $de00  ; back to first bank
  sta $de00  ; back to first bank
Line 1,247: Line 1,244:
  rts
  rts


</pre>
THAT'S IT ! Simple, hm ??? Now tell me again programming RR is hard. :)
THAT'S IT ! Simple, hm ??? Now tell me again programming RR is hard. :)
WELL, a good idea is turn the screen off or wait for $d012 to be in the upper
WELL, a good idea is turn the screen off or wait for $d012 to be in the upper
or lower border though.
or lower border though.
<p>
 
Using the Freezemode RAM-Access routines:
 
<p>
=Apendix C=
==Writing own extensions==
 
When writing parameter extensions for the freezer you may want to access
When writing parameter extensions for the freezer you may want to access
areas, which are currently backed up in the internal Ram. Therefore a (longish)
areas, which are currently backed up into the internal RAM. Therefore a (longish)
routine is already installed in memory when being in Freeze-Mode, which does
routine is already installed in memory when being in Freeze-Mode, which does
the address translation for you and gets the correct byte.
the address translation for you and gets the correct byte.
<p>
 
To check it out yourself, enter the monitor from the Freeze Menu and
To check it out yourself, enter the monitor from the Freeze Menu and
hit * to switch RAM/ROM Config.
hit '''*''' to switch the RAM/ROM Config.
Now you can disassemble the routine at <B>$02a7</B>.
Now you can disassemble the routine at '''$02a7'''.
<p>
 
That routine should be used on any accesses to ordinary RAM from $0000 to
That routine should be used on any accesses to ordinary RAM from $0000 to
$1500 by your Parameter Extension.
$1500 by your Parameter Extension.
Line 1,268: Line 1,266:
the value you want to write, Y-Register needs to be $00. JSR $02a7 and off it is. :)
the value you want to write, Y-Register needs to be $00. JSR $02a7 and off it is. :)
For reading a byte from the area mentioned before, JSR $02b3 does the trick.
For reading a byte from the area mentioned before, JSR $02b3 does the trick.
<p>
 
In case you have code that is slowed down too much by these routines, just use
In case you have code that is slowed down too much by these routines, just use
$23 (or $20) on $de00 to turn the RAM on and $00 on $de00 to switch back to Bank 0 of the
$23 (or $20) on $de00 to turn the RAM on and $00 on $de00 to switch back to Bank 0 of the
cart (Freezer-Bank).[Please keep in mind, that you have to know more precisely what
cart (Freezer-Bank). Please keep in mind, that you have to know more precisely what
you are looking for when directly using $de00].
you are looking for when directly using $de00. (See [[#Appendix C|Appendix C]] for more info.)
<p>
 
The user-area for your extension programs is from $0a00 to $1500.
The user-area for your extension programs is from $0a00 to $1500.
ATTENTION! Programs exceeding $1500 will kill the memory of the frozen
 
'''ATTENTION'''! Programs exceeding $1500 will kill the memory of the frozen
program from $1500 to the end of the extension.
program from $1500 to the end of the extension.
Warning ! Using the Pokefinder when having an extension loaded kills
 
''Warning''! Using the Pokefinder when having an extension loaded kills
the memory page at $1000 on normal Action Replay and RR prior to Beta4.
the memory page at $1000 on normal Action Replay and RR prior to Beta4.
<p>


As soon as you restart and the Disk Turbo is used, your extension is gone anyways. :)
As soon as you restart and the Disk Turbo is used, your extension is gone anyways. :)
(Except for Retro Replay 64kb version from Beta4 and on.)
('''Except for Retro Replay 64kb version from Beta4 and on.''')
<p>
 
Hey, your extension needs to start with &quot;E.&quot; to have the loader recognize it. :)<BR>
Hey, your extension filename needs to start with '''E.''' to have the loader recognize it. :)
A simple RTS is enough to return to the freezer menu, but if you trashed the stack a JMP ($0334)
A simple RTS is enough to return to the freezer menu, but if you trashed the stack a JMP ($0334)
may help aswell. Don't forget to re-enable Bank0 by writing $00 to $de00.
may help aswell. Don't forget to re-enable Bank0 by writing $00 to $de00.
Line 1,290: Line 1,289:
really affects the frozen RAM and that anything below $1500 needs to be accessed using the $02a7/$02b3
really affects the frozen RAM and that anything below $1500 needs to be accessed using the $02a7/$02b3
routines.
routines.
<p>
The following lines are taken from the prlink-source-code and will probably be what
you have been waiting for ... :)
<p>


Old <B>Action Replay</B> hardware has one write-only I/O register at $de00-$deff. <i>The ONE register is $de00.</i>
 
The following lines are taken from the prlink-source-code and will probably be what you have been waiting for ... :)
 
Old '''Action Replay''' hardware has one write-only I/O register at $de00-$deff. ''The ONE register is $de00.''


Its bits are as follows:
Its bits are as follows:
<p>
<pre>
; 7 - unused
; 6 - Resets FREEZE-mode (turns back to normal mode)
; 5 - 1=enable RAM at ROML ($8000) & I/O2 ($DF00, =$9F00-$9FFF)
; 4 - ROM bank selector high (A14)
; 3 - ROM bank selector low (A13)
; 2 - 1=disable cartridge (turn off the $de00 register)
; 1 - 1=-EXROM high
; 0 - 1=-GAME low
</pre>
<p>
<B>Retro Replay</B> hardware has a compatible but heavily extended register-set.
<p>
<pre>
;$de00 write: This register is reset to $00 on a hard reset if not in flash
;            mode. If in flash mode, it is set to $02 in order to prevent the
;            computer from starting the normal cartridge.
;
;            Bit 7 - controls bank-address 15 for ROM banking
;            Bit 6 - must be set once to "1" after a successful freeze in order to set the correct memory map
;                    and enable Bits 0 and 1 of this register. Otherwise no effect.
;            Bit 5 - switches between ROM and RAM: 0=ROM, 1=RAM
;            Bit 4 - controls bank-address 14 for ROM and RAM banking
;            Bit 3 - controls bank-address 13 for ROM and RAM banking
;            Bit 2 - Setting this bit will disable further write accesses to all registers & reset the c64 memory map
;                    to standard, as if there is no cartridge installed at all.
;            Bit 1 controls the EXROM line: A 0 will assert it, a 1 will deassert it.
;            Bit 0 controls the GAME  line: A 1 asserts the line, a 0 will deassert it.


Bit 7 - unused
Bit 6 - Resets FREEZE-mode (turns back to normal mode)
Bit 5 - 1=enable RAM at ROML ($8000) & I/O2 ($DF00, =$9F00-$9FFF)
Bit 4 - ROM bank selector high (A14)
Bit 3 - ROM bank selector low (A13)
Bit 2 - 1=disable cartridge (turn off the $de00 register)
Bit 1 - 1=-EXROM high
Bit 0 - 1=-GAME low
'''Retro Replay''' hardware has a compatible but heavily extended register-set.
$de00 write: This register is reset to $00 on a hard reset if not in flash
              mode. If in flash mode, it is set to $02 in order to prevent the
              computer from starting the normal cartridge.
              Bit 7 - controls bank-address 15 for ROM banking
              Bit 6 - must be set once to "1" after a successful freeze in order to set the correct memory map
                      and enable Bits 0 and 1 of this register. Otherwise no effect.
              Bit 5 - switches between ROM and RAM: 0=ROM, 1=RAM
              Bit 4 - controls bank-address 14 for ROM and RAM banking
              Bit 3 - controls bank-address 13 for ROM and RAM banking
              Bit 2 - Setting this bit will disable further write accesses to all registers & reset the c64 memory map
                      to standard, as if there is no cartridge installed at all.
              Bit 1 controls the EXROM line: A 0 will assert it, a 1 will deassert it.
              Bit 0 controls the GAME  line: A 1 asserts the line, a 0 will deassert it.
$de01 write: Extended control register. If not in Flash mode, this register
              can only be written to once. If in Flash mode, the REUcomp bit
              cannot be set, but the register will not be disabled by the
              first write. Bit 5 is always set to 0 if not in flash mode.
              Bit 7 - bank-address 15 for ROM (mirror of $de00)
              Bit 6 - REU compatibility bit. 0=standard memory map
                                            1=REU compatible memory map
              Bit 5 - bank-address 16 for ROM (only in flash mode)
              Bit 4 - bank-address 14 for RAM and ROM (mirror of $de00)
              Bit 3 - bank-address 13 for RAM and ROM (mirror of $de00)
              Bit 2 - NoFreeze  (1 disables Freeze function)
              Bit 1 - AllowBank  (1 allows banking of RAM in $df00/$de02 area)
              Bit 0 - enable accessory connector (SilverSurfer).


;$de01 write: Extended control register. If not in Flash mode, this register
;            can only be written to once. If in Flash mode, the REUcomp bit
;            cannot be set, but the register will not be disabled by the
;            first write. Bit 5 is always set to 0 if not in flash mode.


;            Bit 7 - bank-address 15 for ROM (mirror of $de00)
$de00 read or $de01 read:
;            Bit 6 - REU compatibility bit. 0=standard memory map
              Bit 7 - feedback of banking bit 15
;                                            1=REU compatible memory map
              Bit 6 - 1=REU compatible memory map active
;            Bit 5 - bank-address 16 for ROM (only in flash mode)
              Bit 5 - feedback of banking bit 16
;            Bit 4 - bank-address 14 for RAM and ROM (mirror of $de00)
              Bit 4 - feedback of banking bit 14
;            Bit 3 - bank-address 13 for RAM and ROM (mirror of $de00)
              Bit 3 - feedback of banking bit 13
;            Bit 2 - NoFreeze  (1 disables Freeze function)
              Bit 2 - 1=Freeze button pressed
;            Bit 1 - AllowBank (1 allows banking of RAM in $df00/$de02 area)
              Bit 1 - feedback of AllowBank bit
;            Bit 0 - enable accessory connector (SilverSurfer).
              Bit 0 - 1=Flashmode active (jumper set)




;$de00 read or $de01 read:
;            Bit 7 - feedback of banking bit 15
;            Bit 6 - 1=REU compatible memory map active
;            Bit 5 - feedback of banking bit 16
;            Bit 4 - feedback of banking bit 14
;            Bit 3 - feedback of banking bit 13
;            Bit 2 - 1=Freeze button pressed
;            Bit 1 - feedback of AllowBank bit
;            Bit 0 - 1=Flashmode active (jumper set)
</PRE>
<p>
To disable the cart:  
To disable the cart:  
<PRE>
sei
sei
lda #$14
lda #$14
Line 1,365: Line 1,359:
cli
cli
rts
rts
should work pretty well.
should work pretty well.
</PRE>
 
<p>
 
This results in the values $00, $08, $10 and $18 for Banks 0,1,2 and 3.
This results in the values $00, $08, $10 and $18 for Banks 0,1,2 and 3.
$80, $88, $90, $98 is used for Banks 4,5,6 and 7 on the new 64kb ROMs.
$80, $88, $90, $98 are used for Banks 4,5,6 and 7 on the new 64kb ROMs.
<p>
 
$0A in $de00 will take you to a safe basic environment.
$0A in $de00 will take you to a safe basic environment.
<p>
 
The new registers take us to:
The new registers take us to:
<p>
<hr size=2 noshade width=90%>
<p>
<h3><a name="appc">Appendix C</a> - Memory Mapping.</h3>


<p>
----
=Appendix D=
==Memory Mapping==
 
 
The newly introduced bits on the Retro Replay hardware allow some new fancy things and allow more
The newly introduced bits on the Retro Replay hardware allow some new fancy things and allow more
compatibility with already existing hardware, but the experts should know about some things.
compatibility with already existing hardware, but the experts should know about some things.
<p>
 
$de00/$df00 are the memory pages where a cartridge can have a memory page mapped in.
$de00/$df00 are the memory pages where a cartridge can have a memory page mapped in.
Bit 6 of $de01 sets the page which is used to map in the IO-Page.<br>
Bit 6 of $de01 sets the page which is used to map in the IO-Page.
Since this register is write once (except for bit 0), the cartridge reset routine usually
Since this register is write once (except for bit 0), the cartridge reset routine usually
sets this bit to its correct value.<br>
sets this bit to its correct value.
Whenever a REU-compatible memory map is used, $de10 to $deff will be used to map in a mirror of
Whenever a REU-compatible memory map is used, $de10 to $deff will be used to map in a mirror of
$9e10 to $9eff. $dfxx is free for REU then.<br>
$9e10 to $9eff. $dfxx is free for REU then.
The default for the RR hardware is to run with the IO area mapped to $df00-$dfff. This is
The default for the RR hardware is to run with the IO area mapped to $df00-$dfff. This is
Action Replay compatible behaviour and the mirror comes from $9f00 to $9fff then.<BR>
Action Replay compatible behaviour and the mirror comes from $9f00 to $9fff then.
The SilverSurfer serial interface uses registers from $de02 to $de0f when plugged in and
The SilverSurfer serial interface uses registers from $de02 to $de0f when plugged in and
activated. Therefore the routines in the IO areas (which are absolutely needed) have been shortened
activated. Therefore the routines in the IO areas (which are absolutely needed) have been shortened
as much as possible and will require further optimizations aswell.<br>
as much as possible and will require further optimizations aswell.
<p>
 
The <B>RR-RAM</B> is something special. Setting bit 5 of $de00 activates the RAM of your RR hardware,
The '''RR-RAM''' is something special. Setting bit 5 of $de00 activates the RAM of your RR hardware,
just like on AR hardware. While trying to use the banking bits 3 and 4 along with bit 5 has no effect
just like on AR hardware. While trying to use the banking bits 3 and 4 along with bit 5 has no effect
on plain AR hardware, the new hardware will map in one of the four available 8kb RAM banks.
on plain AR hardware, the new hardware will map in one of the four available 8kb RAM banks.
Line 1,405: Line 1,399:
mirror from bank 0 of the RAM, so the older cartridge images will work.
mirror from bank 0 of the RAM, so the older cartridge images will work.
With the bit set, the RR will use the selected RAM bank to map in the IO area.
With the bit set, the RR will use the selected RAM bank to map in the IO area.
<p>
 
We will currently keep this bit unset, since this gives the advantage that the
We will currently keep this bit unset, since this gives the advantage that the
upper 3 RAM banks can be used completely and not every time $100 hexbytes have to be wasted
upper 3 RAM banks can be used completely and not every time $100 hexbytes have to be wasted
around $9e00/$9f00.
around $9e00/$9f00.
<p>
 
<b>PLEASE NOTE</b> that you should ONLY use the set/clear freeze and breakpoint commands from the
'''PLEASE NOTE''' that you should ONLY use the set/clear freeze and breakpoint commands from the
monitor with their tokens!<br>
monitor with their tokens!
 
I know many people writing the JSR $dfd3 manually, but since the adress will change, I recommend
I know many people writing the JSR $dfd3 manually, but since the adress will change, I recommend
to keep this in mind!
to keep this in mind!




A final word about the <B>FLASH MODE</B>:
A final word about the '''FLASH MODE''':
I was asked a few times already about how to access the complete 128kb ROM contents.
I was asked a few times already about how to access the complete 128kb ROM contents.
The Flash Mode has another control bit at $de01 which is used to select all of the 128kb chip.
The Flash Mode has another control bit at $de01 which is used to select all of the 128kb chip.

Latest revision as of 00:43, 24 February 2021

22:31, 14 September 2010 (UTC)


Intro

This manual is based on Action Replay MK6 Manual Project64.txt and contains changes and additions for the CyberpunX Replay ROMs.


Thanks

Startup Menu

Although only F1, F3, F5 and F7 are displayed, there are more options

The screen looks like this:

F1 - CONFIGURE MEMORY
F3 - NORMAL RESET
F5 - UTILITIES
F7 - INSTALL FASTLOAD

The complete key setup is:

F1 - Configure Memory            - Fills RAM with $BD and does a normal reset
F2 - Configure Memory            - Fills RAM with $00 and does a normal reset
F3 - Normal Reset
F4 - Unused
F5 - Utilities
F6 (or '0') - Configure Memory   - Fills RAM with $00 and jumps to fastload
F7 - Install Fastload
F8 (or 'B') - Configure Memory   - Fills RAM with $BD and jumps to fastload

Please note, that the keys B and 0(zero) are presets only and can be changed.

NORMAL RESET switches the cartridge off, making it invisible to the system.

CONFIGURE MEMORY fills memory with a single Byte value before resetting. This makes the CyberpunX Replay's Backup Compaction System more efficient. You should select this option before loading a program to be backed up.


Making Backups

A Backup is a complete, working copy of any program. CyberpunX Replay makes backups by taking a 'snapshot' of the whole of the computers memory, together with all graphics and timing information, which is then saved in compacted form to disk.


Preparing To Make A Backup

Have a blank disk ready for saving the backup. If a disk is new it needs to be formatted (see #THE UTILITIES MENU). Select CONFIGURE MEMORY from the Startup Menu.


The Backup Process

Load the program you wish to copy. When the program has loaded and is running, it may be frozen at any time by pressing the Freeze Button. Select BACKUP from the Freeze Menu. The border will flash for 10-20 seconds while the compactor is operating, after which the program is ready to save.


Saving To Disk

Backups can be saved to disk in different styles:

1. TURBO    - Single file using the CyberpunX Replay Standard Turbo.
2. STANDARD - Uses the normal kernal routines, or FAST DOS parallel routines if
             available. Programs over 202 blocks are saved in two parts.

Select the desired option and enter the filename of your choice (up to 15 characters). Press RETURN to start saving. If the drive fails to respond switch it off / on and try again. This is not usually necessary, but may be important if the original was a commercial disk program.

All being well, your backup is now complete. You may now save again with a different style, restart the program, or exit as required. If there is insufficient space on the disk, you will receive the message "DISK FULL". Insert a fresh, formatted disk and try again. On average 3 backups will fit on one disk side.

The Devicechange (F1) was altered here to accept recognized drives (by the internal cart routine) at any device between 8 and 30. This affects the Freeze Menu and the Utilities Menu. If your exotic hardware is not properly recognized and therefore skipped, visit me sometime with that particular device. :)


Loading Your Backups

LOADING FROM THE DIRECTORY WITH FASTLOAD

1. Press F3 or $ (string) to display the Disk Directory (press STOP if a long
   directory scrolls the screen or CBM or CTRL to slow down scrolling).
2. Move the cursor over the name of the program you wish to load.
3. Press F1 and the program will load and run.


LOADING WITHOUT THE CARTRIDGE PRESENT

If you saved your backup with the TURBO or STANDARD option, you will be able to load your backup in again using standard kernal routines whenever the program is below 202 blocks. Larger backups HAVE to be saved in two parts using the STANDARD save option on the freeze menu to retrieve them on a standard 64.

The stand-alone program LOADER was able to load files larger than 202 blocks but was removed to save space.


Trouble Shooting

  • PROGRAM WILL NOT SAVE TO DISK.
Try switching the drive off and on before starting to save. If you get "DRIVE NOT READY"
it probably means that the disk is unformatted. Format the disk and try again.
"DISK FULL" means that there is insufficient free space for the program. Use a fresh disk.
Other error messages may indicate a faulty disk.

Switching the drive off/on will re-enable the drive saving in some cases when IRQ or Fast-Loaders kept the serial bus busy.


  • PROGRAM TO BE COPIED WILL NOT LOAD

Switch the computer off and on and select NORMAL RESET from the Startup Menu before loading the program. A few programs will not load if a disk drive is present. Switch the drive off and switch on after freezing the program.


Grahpics Facilities

The Sprite Killer

SPRITE KILLER is a menu option on the freeze menu usually found under . You may disable collisions between two sprites or collisions between sprites and background data or both. When restart the program you will find that when two sprites collide nothing happens. You can then sail through the whole program without losing a life.

Results will vary from program to program. Shapes which appear to be sprites may actually be user defined characters, or the programmer may be using coordinate information rather than the VIC system to detect collisions. In such cases the Sprite Killer will have no effect. In general, the Killer is more effective on older programs.

Note for the interested:

The routine is looking for LDX/LDY/LDA $d01e/$d01f and replaces it by either LDA/LDX/LDY #$00 and NOP. Easy pattern searching.

I haven't found a single AR version having this option completely right. All cart versions I found are looking for both collision types even when looking for just one collision type.


The Char/Sprite Editor (FIXME)

Saveland

Saveland allows you to save Charsets, ScreenRam, ColorRam, Hires Bitmaps and Memory Locations as well as Koala pictures.

Keep in mind these limitations as they are not displayed on the menu:

  • Saving a charset won't work when having a Koala Pic frozen.
  • Attempting to save the character ROM will result in the RAM beneath it being saved. ($1000, $9000)
  • The Color RAM is saved uncleaned. Will clean it in the future and probably add the option to save it packed.
  • Saving memory from $0000 to $ffff will also include the last byte at $ffff.

Further testing on all options is needed.


Printer Dump

This option is gone, only printing in BASIC and stuff still works.

@P* and @P** still work of course (See CENTRONICS PRINTER INTERFACE.) (FIXME)

Text Editor

This allows you to edit a frozen text based screen. You can use all the normal screen editing keys, such as the CURSOR keys, INSERT, DELETE, etc., plus some extra ones:

R/S     exits the Editor
CTRL-I  inserts a line
CTRL-D  deletes a line.
F3      changes the border colour
F5      changes the background colour.
F7      Toggles the Position Display On and Off (NEW!)
Return and Shift-Return act normal now. No more screen scrolling on them as well.

You can change the text colour in the normal way - hold down the CTRL or CBM key and press keys 1-8. Press RETURN to exit.

The editor works with text based screens only - you cannot get useful results on a bitmapped screen. Also, if the frozen program uses a different character set, the display characters may not correspond with those printed on the keyboard, so a little experimentation may be necessary - try pressing SHIFT and CBM together to change characters.

The screen editor can be used to insert your own messages on the game title screens. It is also a useful programming aid, because the cursor column and row, and the screen address are displayed which helps in designing screen layouts.

People complained about the display and/or textscreen having the wrong address, but I cannot find the reason, if that really happens. The current textscreen address is calculated from the VIC and should be fine.

Text searching is more easily achieved via the monitor. Enter the monitor and type I (RETURN). This displays memory in the form of screen codes. You can scan through the whole of the memory looking for text strings - to change any text simply type over it and RETURN. Make sure you don't type over non-text areas.

You can also display ASCII codes by typing J (RETURN). Type X to leave the monitor. Refer to MACHINE CODE MONITOR for more details.


Pokes & Parameters

How to Enter

Computer magazines used to publish Pokes which can be entered into programs to add features such as infinite lives to game programs. These usually required the machine to be reset.

To reset the machine press the RESET button and select NORMAL RESET from the startup Menu.

In addition, the cartridge allows you to enter pokes after a program has been frozen. Select POKES, enter the required poke or pokes (one at a time), and press RUN/STOP or just RETURN. The program can then be restarted using F3.

It is possible to enter decimal and hexadecimal notations in mixed order here. You need to enter a leading string ($) for the hexadecimal numbers, of course.

Examples:

 POKE $f,255
 POKE 1024,$4e
 POKE $fce,$ea 
 POKE 1,0

Pokefinder is offering an excessive list of pokes for various games.

POKEFINDER

This is an automatic infinite lives finder for games. Until now finding pokes was a difficult long-winded procedure requiring specialized knowledge. Using Pokefinder, you can generate that elusive poke, even if you don't understand a word of machine code!

Just follow this procedure:
1) Load up and run your game. When play starts note how many lives you
   begin with and press the Freeze Button.

2) Select POKEFINDER. You will be asked 'HOW MANY LIVES NOW?' - enter the
   number of lives you started with. Pokefinder will now analyze the memory and
   display a list of possible pokes. Usually there will be many of these, so you
   will be prompted to 'LOSE A LIFE AND REFREEZE'.

3) Restart the game and continue to play until you lose a life. Make sure that
   you lose ONE LIFE ONLY. Wait for any "death sequence" to complete. When play
   resumes, press the Freeze Button.

4) Select POKEFINDER again. You will get one of three messages:

   a) LOSE A LIFE AND REFREEZE - go back to 3 above.
   b) ABORTED - Pokefinder has failed.
   c) INSTALLED - the poke (or pokes) have been found and entered into the program.
      Write down the displayed poke(s) for future use. If Pokefinder fails it may
      be because the programmer used an unusual method of counting the number of
      lives remaining. However it can be that you got the starting number of lives
      wrong or accidentally lost more than one life between passes - so its worth
      going through the procedure again in case you made a mistake the first time.
      Tests show a success rate of over 80% - very high for this type of program.
      Some multiload programs need a different poke for each level in which case
      you should repeat the above procedure after each Load.


If the border starts to flash while searching for codes, there is a buffer overflow.

Searching for screencodes was added which should increase possibilities of finding valid codes just a little.

Additionally values between 1 and 255 work now, so there's an even higher chance to find timetrainers and the like. Previous AR carts only used the very last digit entered at the prompt as a search value.

If the usual search fails, the experienced poke hunter searches for the last digit on lives/timer/energy. Another reason for not finding a valid code may be hex/dec flag usage. In this case letting the game value drop below ten and retry from there on may lead to a final success.

Parameters

The parameter option allows you to load enhancement programs from disk, which can fulfill actions the normal CyberpunX Replay software is not able to.

The options to load from tape using "T." as prefix and loading original parameter files to backup protected games have been removed. We do not endorse the pirating of commercial software and neither should you!

The only parameters currently accepted have to start with "E." as a prefix.

You can find additional information on programming your own extension in the coding appendix. Don't worry, I am planning on extending this menu sometime in the future, so it will become more useful again. :)


Utilities Menu

The Utilities Menu is accessed from the Startup Menu. Some of the utilities can also be called from Fastload (see FASTLOAD UTILITIES).

The Devicechange (F1) was altered here to accept recognized drives (by the internal cart routine) at any device between 8 and 30. This affects the Freeze Menu and the Utilities Menu. If your exotic hardware is not properly recognized and therefore skipped, visit me sometime with that particular device. :)


Formatting A Disk

When a disk is new it needs to be formatted before if can store any programs. When you select this option you will be asked to enter the disk NAME, which can be any name up to 16 characters in length, and the ID number which can be any two characters. Press RETURN and the disk will be formatted at high speed.

The directory of the disk will be displayed. Occasionally, fast formats do not "take" first time. If the directory does not show 664 BLOCKS FREE, try again and everything should be OK. If a disk consistently fails to format, a faulty disk is indicated.

NOTE: Formatting a disk destroys any previous information which may have been on the disk. Be certain that you have the correct disk inserted before selecting this option.


Disk Filecopier (FIXME)

The Filecopier will handle Program, Sequential and User files up to 247 blocks in length. The utility can be used with one or two drives. The MULTI OUTPUT option allows several copies to be taken from each pass.

When you have selected your options, press SPACE and each file in the directory will be displayed in turn. Press Y if you want to copy that file, otherwise press N and if will be ignored. Any file which cannot be handled (e.g. Relative Files), will be skipped. Press S to start copying, else copying will begin when you reach the end of the directory.

At the end of the directory, the selected files will be loaded. Several passes may be necessary, depending on the length and number of files selected. You will be prompted to swap disks when necessary. The SOURCE DISK is the disk which is being loaded FROM and the TARGET DISK is the disk which is being saved TO. The Target Disk(s) should be formatted in advance.

NOTE: The Filecopier cannot copy the Action Replay Loader and is not available currently :(.


Whole Disk Copier

The Disk Copier is for the 1541 (and compatibles) only. You can use the copier with one or two 1541 drives. With a single drive you will be prompted to insert the Source and Destination Disks in turn.

BAM COPY - If selected, only the occupied tracks will be copied. This can save a lot of time when copying partially filled disks.

IGNORE ERRORS - if selected, the written data will not be checked. Otherwise, the written data will be verified against memory - this takes longer but gives greater security for important data.

NOTE: If you have any difficulty in using the disk copier with the 1570 or 1571 drives, enter the following disk command: @U0>M0 <RETURN> This forces the drive into 1541 mode.

NOTE: Any deleted Warp files on the disk may cause spurious error reports. Also, it is possible that valid Warp files will also cause errors.


Fastload Utilities

FASTLOAD is the turbo and utilities function of CyberpunX Replay. Operating in the BASIC environment, numerous extra commands and facilities are available. To install, select INSTALL FASTLOAD from the Startup Menu, or hold down the CBM key when you power up or press the Reset Button.


Ramloader

RAMLOADER is a Disk Turbo - but a very special one. Special because it is fast - very fast! It uses standard GCR format, so it works with all your existing programs without special conversion. RAMLOADER will load a 202 block program in around 9 seconds, where the typical Disk Turbo would take between 20-30 seconds, and can not load files of any length. It is fully independent of computer memory. It works with all drives from the 1541 upwards (including the 1581 and the 1571 in two-sided mode).

The Disk Turbo can be switched out with the command OFF. Load and Save will then operate using the standard Kernal calls. Type ON to re-enable the Turbo.

The RAMLOADER can be switched off and on with the commands @K- and @K+. This reduces loading speed to Freeze Turbo but doesn't blank the screen during load. (and won't kill already loaded Parameter Extensions in Replay RAM)

Ninja/The Dreams reported functionality of the Ramloader on FD drives as well. Also CMD HD devices shouldn't cause major trouble, since I used one 6 years ago with the cart. The saver doesn't work for FD drives, though. Will try to fix that sometime soon.

NOTE: Some commercial programs may override the Disk Turbo.


WARP*25 Disk Turbo

WARP*25 was removed completely to gain space on the ROM.

It was 1541 compatible only anyways and had load, save and scratch routines which ate quite a lot of memory. The program WARP 25 from Datel will still allow you to create and load warp-saved files with some work overhead.

Turbolinker

When you load and run a commercial program with Fastload, you will often find that the cartridge Turbo System is disabled for any subsequent Load/Save operations. This can be remedied by the TURBOLINKER.

Select TURBOLINKER from the menu and select the device to be linked. Then restart the program.

Loads and Saves will now be redirected to that device. Note that if the program incorporates it's own Turbo system, or does not use the Kernal Load/Save commands, then the TURBOLINKER will not work.

Basically the load/save vectors are set to the cartridge routines and therefore allow programs to use the cartridge even after $FD15 was called and the kernel defaults are set.

Single Stroke Commands

A number of single stroke commands are available from Fastload:

1) FUNCTION KEYS

F1 LOAD the first file on the disk to it's absolute address. (LOAD "0:*",8,1)
F2 LOAD the first file on the disk to the Basic program area. (LOAD "0:*",8)
F3 Display disk directory without corrupting memory
F4 Toggle available drives.
F5 LIST
F6 Freeze Menu
F7 RUN
F8 MON See here

There have been some complains about this F-key setup, but this is the original Action Replay V5 setup.

Note: For drive toggle, the Jiffydos routine will be used if available (Tested with JD 6.01), else my own routine will search for the next available drive on the bus. Tested in monitor and freezemode. Be careful on a busy drive chain when IRQ loaders and the like keep the serial bus for themselves. JiffyDOS supplies drive checking up to drive #30, and so do I. (RamLink is said to use Device 16. When JD is smashed into Kernal by RL, it should be reached by the JD routine then. Bug reports welcome.)


2) EASY LOAD/SAVE COMMANDS

/PROGNAME equals to LOAD "PROGNAME",8,1
^PROGNAME equals to LOAD "PROGNAME",8 & RUN (Arrow Up)
%PROGNAME equals to LOAD "PROGNAME",8,1 & RUN
&PROGNAME equivalent to VERIFY "PROGNAME",8,1
{POUND_SIGN}PROGNAME equals to SAVE "PROGNAME",8

Loading with these commands will only set the BASIC end pointers if the program loads to the start of Basic ($0801). Also, the Filename does not corrupt the Basic String area ($9FF0-$9FFF usually). Very long files can be saved with the {POUND_SIGN} command where the normal save command would give an ?OUT OF MEMORY ERROR.

LOADING FROM THE DIRECTORY

If you display the directory and then move the cursor onto a line containing an entry, you can load that program simply by pressing F1 to load and run or F2 to load without running. This is the most convenient way of loading a program.

3) EASY ACCESS TO THE ERROR CHANNEL.

Instead of using OPEN 15,8,15 "COMMANDSTRING":CLOSE 15, you may use the "@" key to send disk commands and read the error channel:


@          - reads the error channel of the current device.
@(device)  - Switches to (device) and displays the status.
@#(device) - Stupidly writes (device) to 186/$ba witout status message. (This
             option is used by the F4 toggle, but the F4 device toggle
             previously scans the devices from current up to #30 to ensure a 
             drive is present at the selected address.)
@I         - initialize the drive
@V         - validate (cannot be used on Warp*25 disks)
@R:NEW=OLD - rename a file.
@N:NAME    - clear the directory of a previously used disk.
@N:NAME,ID - format a new disk.
@$ or $    - display directory.
@S:NAME    - scratch (delete) a program from the disk.
@H:NAME,ID - a new command not available in the normal DOS. This changes the 
             name and ID of the disk without clearing the directory.
             Initialize was added here to re-read the drive buffer,
             so the next hit on F3 will really show you a new header on the dir.

NOTE:        @s:name1,name2,name3,names*   works to scratch several files at once.


@K- and @K+ control the fastload-mode (as already explained at #Ramloader). While @K+ gives you the normal fastload speed, @K- will switch to the slower speeder used by the freezer. The advantages of @K- are simple:

a) The Replay RAM is kept so previously loaded extensions stay in RAM (Carts >8kb RAM should be able to avoid this).

b) Programs can sometimes be loaded from bad disks using this mode.

c) PAL/NTSC compatibility.


@=8 and @=9 will change the current device to the given device number.

This is a sort of drive toggle, like some old copy programs provide it. Use the logical turn-off/on drive sequence to avoid device number collisions. This command is and will stay limited to drive 8 and 9, but SHOULD be able to change e.g. device 11 to 9. This command should work fine with 1541 and 1581 drives, as the required Zeropage adresses on the drive memory are used the same way. I am not sure about FD drives, as I found no documentation about them so far.

Hints:

If you use a two drive system, the second drive can be accessed by reading its error channel, e.g. @9. Subsequent single stroke commands will be directed to device 9. If a filename contains leading or trailing spaces, it should be enclosed in quotes, e.g. " PROGNAME".

And you may also use: @(device)(command) to change to the device and immediately execute the command (e.g. @8$ or @9n:test,id).

Consult your disk drive manual for further information about the error channel.


ARE YOU SURE? has been removed - so be careful again on scratch and format.


Splashscreen

A funky name for a (hopefully) useful function.

2) CBM-key along with an F-Key!

Using CBM and F1 or CBM and F3 allows you to switch between different copies of the normal screen area ($0400-$0800). Our main intention was to save some output of e.g. the monitor to another screen to not always have to re-search the memory or keep adresses in mind for examining routines. You may find different usages for this option though. :) These areas are kept untouched (as far as possible) and serve you with a reset-proof ramdisk even.

32kb ROMs only have CBM and F1 and the saved screen can be destroyed by the freeze mode sometimes. This is due to less available RAM on old AR cartridges. 64kb ROMs will use the 32kb RAM available and shouldn't cause problems here.


CBM & F7 will be used in the future to enter the SilverSurfer mode during monitor or basic mode. Menumodes on PowerUp and Freezer will support automatic detection of SilverSurfer initiated commands.

Play a little with it. Hope you like it.


Toolkit Commands

A number of extra basic commands are provided, which operate in direct mode. The commands may be abbreviated by typing just the first three characters.

MONITOR or MON will start the machine code monitor.

OLD will recover a basic program which has just been NEWed.

DELETE or DEL will delete a block of program lines. Syntax is like LIST except that the first line to be deleted must be specified e.g. DEL 1000-2000 will delete lines 1000 to 2000 inclusive. DEL 1000- will delete from line 1000 to the end of the program.

LINESAVE or LIN will save to disk a section of a basic program e.g.: LIN "PROGNAME",8,1000-2000 will save program lines from 1000 to 2000 inclusive. Lines saved in this way may be loaded back as separate basic programs, or MERGED into other programs.


MERGE or MER loads a basic program from disk and combines it with a program in memory if two lines have the same number, the new line replaces the existing line. A program may also be merged with new line numbers e.g.: MERGE "PROGNAME",8 merges a program with the program in memory. MERGE "PROGNAME",8,1000,10 will renumber the lines before they are merged, starting with line 1000 and incrementing in steps of 10 GOTO & GOSUB statements will NOT be renumbered. Merging into a long program is a lengthy process, so be patient.

APPEND or APP differs from MERGE in that the new program is tagged onto the end of the previous one. It also occurs at turbo speed, e.g.: APP "PROGNAME",8 loads the program starting at the end of the previous one. For Append to be useful, the program to be appended should have line numbers greater than the existing program.


AUTO or AUT provides automatic line numbering as you type in a program, e.g.: AUTO 1000,10 starts automatic line numbering at line 1000 and increments in steps of 10. To turn AUTO off, press RETURN against a blank line. If you subsequently want to continue automatic numbering type AUTO on its own and numbering will continue from the last line number which was automatically displayed.

FIND or FIN will perform a search on the basic program currently in ram and when a line contains matches to the given string, it'll be returned as result.

Examples:   FIND REM
            FIND 20
            FIND POKE53282
            FIND LIVES

Exceptions apply like this: the given string will be tokenized and whenever it contains a basic keyword, that will be converted as well. So you will probably not find the string "MONKEY" since it has ON in it. Putting the string into quotes won't help either, since they will be searched for as well. Also note that FIND needs a SPACE right after the command.

BOOT will load a machine code file and jump to the first address loaded. E.G. You have a program which you would normally load with LOAD "PROGNAME",8,1 followed by a SYS number. BOOT will perform the same function . NOTE that BOOT will only work when the program is started by SYSing to the first address loaded. Syntax: BOOT "PROGNAME",8.

PLIST will list any basic program directly from disk to a CBM printer (device 4), without overwriting the program in memory. Syntax: PLIST "PROGNAME",8 . This command can also be used to print the directory PLIST"$",8 . PLIST won't work with machine code and sequential files.

SLIST is the same as PLIST except that output is to the screen.

OFF & ON - used to switch the disk turbo routines off and on.

COPY or COP will start the Disk Filecopier.

BACKUP or BAC will start the Whole Disk Backup

ZAP will reset the computer and disable the RR, just like Reset + CTRL Key. Locations $0000-$07ff will be corrupted but $0800 - $0803 is restored to enable running of machine language programs with a SYS header. Basic programs won't have the pointers set correctly, so it may be necessary to re-load after the ZAP command. (or using normal reset?)

RENUM or REN (64 kb only)

This command will renumber your basic program currently in memory. It takes two parameters separated by a comma. These are the starting line number and the step size in which the line numbers are to be incremented.

Example: RENUM 1000,1


TASS or TAS (64 kb only) This command simply copies a version of Turbo Assembler into ram from $9000-$cf00. A non-ram using version will be implemented soon. Checky is working on this.

BASIC EXTENSION Hex ($), binary (%) and octal (&) numbers can also be included in basic expressions, e.g. SYS 49152 could be entered as SYS $C000.


Centronics Printer Interface

CyberpunX Replay can drive a Centronics printer connected to the parallel port. If a parallel device is connected and active, any output to the printer (device 4) will automatically be sent to the parallel port. Note that you need a suitable connecting cable before you can use a parallel printer. The interface will normally perform any necessary character translation, including most graphic characters, but you can also send untranslated characters or escape codes e.g. to change style and formatting.

To print a Basic program enter:

OPEN 4,4:CMD4:LIST

When printing is complete enter

PRINT#4:CLOSE 4

To send special printer codes and untranslated characters you need to open a special channel (secondary channel 9). Here is an example:

10 OPEN 4,4   : REM OPEN A NORMAL CHANNEL TO THE PRINTER
20 OPEN 9,4,9 : REM OPEN A COMMAND CHANNEL
30 PRINT#9,CHR$(27)+CHR$(87)+CHR$(1);: REM EXPANDED PRINT ON
40 PRINT#4,"THE QUICK BROWN FOX"
50 PRINT#9,CHR$(27)+CHR$(87)+CHR$(0);: REM EXPANDED PRINT OFF
60 PRINT#4,"THE QUICK BROWN FOX"
70 CLOSE 4:CLOSE 9: REM CLOSE PRINTER CHANNELS

This short example should print "THE QUICK BROWN FOX" in double width characters and again in normal size characters. Note the semicolon (;) at the end of the command string - this prevents a carriage return from being sent at the end of the command string. Refer to your printer manual for details of other special commands. Most, but not all commands begin with the escape character CHR$(27). The interface prints according to the screen mode - you switch between "Business" and "Graphics" modes by pressing SHIFT & CBM together.

If you find that everything gets printed on the same line, you need to set a special DIP Switch on your printer to make the paper move down at the end of each line (a Linefeed). Again, refer to your printer manual. If your printer cannot do this, you can send a special command to CyberpunX Replay which forces a linefeed with each carriage return:

@PLF - causes a linefeed to be sent with every carriage return.

You can also print characters direction with @P, e.g.

@P"THE QUICK BROWN FOX"

@P 27,87,1 "THE QUICK BROWN FOX" 27,87,0 "THE QUICK BROWN FOX"


The second example does the same as the Basic program listed above. Note how you can mix command sequences and strings on the same line.

The @P command works in Direct mode, or in the Machine Code Monitor, but not from within a program.

@P* - dumps the entire text content of the screen.

@P** - works in the Freeze Monitor, it dumps the frozen screen.

Hope all of these printer commands still work. Someone test and let me know!


Machine Code Monitor

CyberpunX Replay includes a powerful extended Machine Code Monitor. To call the Monitor from Fastload, enter MON or press F8. The Monitor is also available from the Freeze Menu. In this mode all of the memory including the screen, stack and zero page may be examined in its condition at the point at which the program was frozen.

All 64K of memory remains unaffected by the Freeze Monitor. Any alterations made will be incorporated into the program when it is restarted or saved. A working knowledge of 6502 assembly language and Hex notation is required by the user, if the Monitor is to be used effectively. Some of the Monitor instructions can cause the system to crash if the user is not fully aware of what is going on.


Command Summary

A      - Assemble.
B      - Execute a Basic command.
C      - Compare memory.
D      - Disassemble.
F      - Fill memory.
G      - Go. Execute program as per register display.
H      - Hunt for byte/text-sequence.
IO     - Displays I/O registers (freeze mode only).
I      - Interpret memory as CBM codes. Acts as I* now.
I*     - Interpret memory as CBM codes. As usual.
J      - Interpret memory as ASCII codes. Former I function.
L      - Load.
M      - Display memory in Hex.
N      - Number conversion.
P      - (prefix).  Direct output to the printer (device 4).
R      - Display registers at entry or freeze time.
S      - Save.
T      - Transfer memory.
U      - User function.
V      - Verify.
W      - Watch Freeze/BreakPoints.
X      - Exit to Basic or Freeze Menu.
*      - Toggle RAM/ROM modes.
@      - Read error channel or send disk command.
@(dev) - Changes device and display status.
@#(dev)- Only changes device.
$      - Display directory.

Special disk related commands only available in MON:

@*8    - Access drive memory (device 8).
@*9    - Access drive memory (device 9).
@*     - Return access to computer memory.
@ME    - Execute memory in disk drive.
@BR    - Read a disk sector into computer memory.
@BW    - Write a sector from computer memory to disk.

Note: Whenever using one of the commands to edit memory locations, just go over the line, edit as needed and hit

  • RETURN to accept the changes.
  • CBM+Return accept the changes, keep you in editmode and present the next editable line to you.
  • SHIFT+RETURN leaves editmode without accepting changes.

Command Description

Important Notes:

When an end address is specified it should be exclusive. The end address is one Byte greater than the last address to be operated on e.g.:

.S"PROGNAME",8,C000,D000 saves up to but not including D000.

Usually all numbers you enter after a command are interpreted as hex. (An exception is drive numbers which are always decimal). You can also force the commands to deal with decimal numbers by using a leading plus (+) sign. You will need to enter the numbers in high/low order and only 0-255 are accepted.

Examples:  M +0+186    - start hexdump at $00ba
           I +32+0     - start asciidump at $2000

A trailing hyphen (-) will scroll the output until you abort it with run/stop or start controlling it using the F-keys.

Examples:  M 1000 -    - hexdump from $1000 to xxx
           I 3000 -    - asciidump from $3000 to xxx

1) EXAMINING MEMORY.

Memory may be examined in Hex/ASCII, Disassembly, or Interpreted as ASCII or screen codes:


.D C000 D000 - disassemble from $C000 to $D000.
.M C000 D000 - display memory from $C000 to $D000.
.I C000 D000 - interpret Screen Codes from $C000 to $D000.
.D C000      - disassemble one instruction at $C000.
.M C000-     - display memory from $C000 onwards.
.D           - disassemble from the current address onwards.
.I           - interpret Screen Codes from the current address.
.I*          - interpret Screen Codes from the current address.
.J           - interpret ASCII from the current address.

The J acts as former plain I now and displays memory in ASCII format.

The display can be controlled in two ways:

a) Function keys F5 and F7 cause continual scrolling up or down respectively. Set for fast scanning through memory. Any other key will stop or start the display. F5 and F7 change the direction of the scroll. STOP or CURSOR DOWN returns to the input prompt.

b) Cursor Up and Cursor Down will scroll the display by one line at the top or bottom of the screen and return to input prompt. Best for editing. Memory may be altered - type over any byte, code or mnemonic and press RETURN. A question mark indicates an error.


2) BANK SWITCHING.

On entry, the Monitor is in RAM mode - all systems ROM's are switched out during memory access. To access the ROM's and I/O devices, use the * command, which toggles between the two modes.

In normal Monitor mode this also enables the cart ROM mirroring. I* 8000 will show you a dump of that area. (Usually bank 1 as that's where the monitor and toolkit routines mainly work.)

In FREEZE monitor mode this command also enables mirroring of $0000 to $09ff of the Cartridge RAM (!). (Written in this etext originally A good hint as well is(In Freeze Mode ofcoz):

*                       ; Switch Ram-Rom ON
@BR (track)(sector) 09  ; Loads a block from disk into the RR RAM.
@BW (track)(sector) 09  ; Saves the modded block, but this way none of the normal RAM gets
                          corrupted, and flawlessly restarting the frozen program is possible.


3) ASSEMBLY.

.A C000 LDA #$01

Assemble an instruction in standard 6502 mnemonics at $C000. The next memory address will be displayed ready for the next instruction.


Before you had to enter the $ all the time to assemble properly. Now the monitor assumes Hex all the time.

 LDA 01     will turn into LDA $01
 LDA 1000,X will turn into LDA $1000,X
 LDA (FE),Y will turn into LDA ($FE),Y
 etc...


4) REGISTER DISPLAY.

.R

The program counter, A, X & Y registers, location $01 and the stack pointer are displayed in Hex. The Status register is displayed in Binary. Alter registers by typing over the relevant byte or flag (and hit return on that line).


5) FILL MEMORY

.F C000 D000 AA

Fill memory from $C000 to $D000 with the byte $AA.

Now supports pattern fill as well.

 .F C000 D000 "foobar!!!"
 .F C000 D000 ee 20 d0


6) HUNT MEMORY

.H C000 D000 01 02 03
.H C000 D000 "STRING"
.H C000 D000 8D 2? d0
.H C000 D000 20 ?? 10

Hunt through memory for a sequence of bytes or an ASCII string. If any occurrence is detected, the address will be displayed.

Wildcard hunt added. Hunt is using a certain priority to search memory. Wildcard hunt as well as ordinary pattern hunt are only performed when no stacking is done. In this example, only the string search will be performed:

  H C000 D000 01 02 03 "TEST"

In general, command stacking only works on a few locations, so it's a good idea to avoid it. Only on the disk command Scratch, filename stacking is a good idea sometimes.


7) COMPARE

.C C000 D000 E000

Compare the area of memory from $C000 to $D000 with memory starting at $E000. If there is any discrepancy, the memory locations will be displayed together with the bytes at those locations.

This has optimized and colored output now.


8) TRANSFER MEMORY

.T C000 D000 E000

Move memory starting at $C000 and ending at $D000 memory starting at $E000. This is an intelligent transfer - memory areas may overlap and may be moved either up or down in memory.


9) GO

.G C000

Load registers as per the register display and start executing the machine code program starting at $C000. The program may end with either a BRK or an RTS instruction.


10) NUMBER CONVERSION

.N $C000
.N 49152
.N %10101010
.N $C000+$FF
.N $FF-1+$4000
.N $FF00/(2 * $AA)

Displays the result of an expression in HEX, DECIMAL and BINARY. If the expression is a single byte value, a PETASCII character is displayed.


11) OUTPUT TO PRINTER

.PM C000 D000
.PH C000 D000 "STRING"

P is used as a prefix to another command. Memory display will be directed to the printer (device 4). Hold STOP to quit.


12) EXECUTE A BASIC COMMAND

.BPRINT 8*256
.BPRINT "TEST"
.BPLIST             ''DOES THIS WORK ? I have no printer :)''


13) EXECUTE A USER FUNCTION Using this function, you can change a memory area to your own needs. The syntax is:

U <start> <end> <list_of_opcodes>

Basically, the list of opcodes is a small subroutine which will be accessed for every byte in that memory area. The original byte comes in the accumulator and the modified value has also to be in the accu. You don't have to specify an RTS or something.

So, this routine will invert the memory from $1000 to $1fff (49 FF = EOR #$FF):

U 1000 2000 49 FF

This routine will shift the high-nybbles into the low-nybbles (4A = LSR A):

U 1000 2000 4A 4A 4A 4A

Before each call of the subroutine, the carry-flag is cleared. The X-Register will be set to 0 before the very first call and can then be used freely.

Y-register must be 0 on exit, better don't touch it!


Using the X-Register you can easily watch a charset, for example (8A E8 = TXA; INX):

U 0400 0500 8A E8


As you can see, this is a powerful option giving you a lot of possibilities. But really think twice before pressing enter, a wrong opcode might lead to a serious crash and/or loss of data, of course!


Ninja added this nice function on very early 3.8 ROMs already - blame Count for the late documentation!


14) LOAD, SAVE & VERIFY (FIXME)

.L"PROGNAME"
.L"PROGNAME",8,C000
.S"PROGNAME",8,C000,D000
.S"PROGNAME",8,C000,D000,E000
.V"PROGNAME"

Load, Save, Verify. If a load address is specified, the program will be loaded to that location, otherwise it will be loaded to the address from which it was saved. Save requires a start and end address, which should be one byte after the last address to be saved. If an additional address is added to the save addresses, this will be saved as the reload address of the program (disk only). All disk I/O uses RAM locations.

NOTE: You cannot load and save memory below $0800 if the Monitor was entered from the Freeze Menu.

It is possible to save that area using the Memory Saver in freezer's Saveland now. Remember that the ending address is exclusive. You may save address $FFFF by using $0000 as the ending address. (I prefer to set IRQ's manually.)

.S"NAME",8,0800,0000

NOTE: Tape accesses are avoided by the monitor now.


15) I/O REGISTERS

.IO

Displays the I/O registers $DC00-$DC0F,$DD00-$DD0F & $D000-$D02E. Any alternations will be incorporated on Restart or Backup. This command only works if the Monitor was called from the Freeze Menu.


16) WATCH FREEZE/BREAK-POINTS

.W

Displays the memory locations of the Freeze- and Break-Points and only works in freeze mode monitor. Freezepoints are displayed in white color, Breakpoints in gray color. Disassembling freezepoints will show you the obligatory JSR $Dxxx. Having it set using the SF command and restarting will restart at the location where the $Dxxx was hit. When setting it manually in a program with the assemble command the next command will be executed after restart.

Hope this is somewhat clear, at least to the pros.

Disk Monitor Functions

In monitor mode all the usual disk command options work as normal. This includes device changing using @(device) and @#(device). Output for the error channel using @ was changed a little to save display space. The monitor mode also has some additional functions, described below.

Access drive memory

Syntax: @* (read device) (write device)

Device 0 indicates that the "device" is computer RAM. If no write device is specified, the write device will be set to the read device number. If no parameters are specified, then the monitor reverts to its default (read and write to computer RAM).

Examples:
  @*8   Read and write to device 8.
  @*89  Read from device 8, write to device 9.
  @*80  Read from device 8, write to computer RAM.
  @*08  Read from computer RAM, write to device 8.
  @*    Return to default.

All the Monitor's memory access commands can be used with drive memory. Memory can be transferred between devices by setting up the required parameters before using the T command.

As this is a real hardcore hack option, I decided to not mess with the line parsing AGAIN and limit this to devices 8 and 9. Devices 10-30 are not possible here.

Other Disk Commands

@ME (address) - executes a program in drive memory.
@BR (TRACK) (SECTOR) (MEMORY PAGE).
@BW (TRACK) (SECTOR) (MEMORY PAGE).

These are block read and write commands. If no memory page is specified, then page $CF (=$CF00) will be used.

@BR 12 01 40  - Read track 18, sector 1 to page $4000.
@BW 11 00 40  - Write page $40 to track 17, sector 0.
@BR +18,+1,40 - same as the first example.

You can specify decimal notation for the track and sector numbers by prefixing with the + character.
Separate the parameters with a comma when using decimals.


Take care when writing a disk block - if you accidentally specify the wrong parameters, you cand easily trash the disk!

These routines should work fine on devices 8-30.


Freeze & Break Points

Please read Appendix C aswell about different cartridge RAM configurations.

From the Freeze Monitor, you can set explicit Freeze and Break points in a program. Up to five Freeze or Break points can be set, which are cleared when program control passes to the Monitor. Following are the Freeze and Break instructions:


SF - Set Freeze Point
SZ - Set Break Point
RF - Remove Freeze Point (formerly CF)
RZ - Remove Break Point (formerly CB)

To set a Freeze or Break point, disassemble the required part of the program, and type the command at the address at which the program should be interrupted.

.> C000 A9 41    LDA #$41
.> C002 20 D2 FF JSR $FFD2
.> C005 60       RTS

.> C002 SF D2 FF JSR $FFD2 >RETURN<   ;Modify location $C002
.> C002 20 D3 DF JSR $DFD3            ;Freeze Point is set

Control will pass to the Freeze Monitor at address $C002 and the original instruction (JSR $FFD2) is restored.

You can explicitly clear a Freeze or Break point by typing RF or RZ at the address.

A Break point may also be referred to as a Zero Point. The use of CF, CB, and SB interfered with the opcodes CLI, CLV, CLD, CLC, and SBC, and were changed therefore.


Freeze and Break points act exactly as if you had pressed the freeze button, but you can precisely control the point at which the program is frozen. Breaks pass through the IRQ vector at $FFFE and the break vector at $0316, so they are not suitable for programs which modify these vectors.

Freeze points don't use these vectors, so they are particularly useful for programs (e.g. most games) which switch out the kernal ROM. However, because they use three bytes of code, you need to be careful not to place a Freeze at a point where program control may hit the second or third bytes of the freeze instruction, or you will crash the machine. The I/O ROM ($D000) must also be switched in.

Freeze points can be set only from the Freeze Monitor. You can directly place a freeze instruction (JSR $DFD3) using either the Monitor (in which case it will act as a subroutine, calling the Freeze Monitor and returning to the next instruction), or you can call the freezer from a Basic program with SYS 57299. On restart, the program will continue.

( Warning ! On REU-compatible RR-ROMs, the mentioned adress changes ! What to use exactly, please see from setting a freezepoint with the SF command in freeze-monitor.)


Remember - if you find that a program will not load when the cartridge is plugged in - switch the computer off and on, and select NORMAL RESET instead of configuring the memory, before loading the program.

As an expert I gotta say: Remember - Always clear your ram, but that would differ from the last sentence, hm? :)


Miscellaneous Tips

Here are some under-documented functions and things to know.


1571 Drive Notes

Switch to double sided mode with the following.

  @U0>M1   or   OPEN 15,8,15,"U0>M1":CLOSE 15

In this mode, both sides of the disk are used, giving twice the storage space when the disk is formatted. To switch to single sided (1541) mode:

  @U0>M0   or   OPEN 15,8,15,"U0>M0":CLOSE 15

The drive powers up in 1541 mode when connected to a 64, so enter the command mentioned before if you wish to use double sided mode.

NOTE: Side two of a double-sided disk cannot be read by a 1541 drive.


1581 Drive Notes

Some samples of this drive are not very happy when working with a 64 or 128 in 64 mode. If you find that the system hangs when reading the directory or error channel you should press STOP/RESTORE and enter the following commands:

  @U0>B0
  @U0>B0 or OPEN 15,8,15,"U0>B0":PRINT#15,"U0>B0":CLOSE 15

NOTE: The same command is entered twice. It is only necessary with early
      samples of the drive and should be entered each time you switch on the
      drive or reset the system.

Burning a new drive rom for the 1581 usually fixes this problem. Sometimes replacing the controller is needed, but getting these is hard. Also the 1581 JiffyDOS works fine with the CyberpunX Replay Fastloader.


FIXME

FASTLOAD Turbos & Interfaces

FASTSAVE & DISKCOPY use an interleave of 8.

The CENTRONICS interface emulates channel 4 & 5 serial printers. If you have both serial & centronics printers the first has higher priority (use ONLINE on printer if necessary). Without secondary addr your printer emulates MPS801 characters, but with secondary address 9 on CENTRONICS native(raw) chars will be printed.


FASTLOAD & TOOLKIT

If your filename in save was "*" the program will be named "". To get rid of it again, use @s: without name as well. @R:*=filename will rename the file to "". You should only do this to the first program on disk, to be able to load it back using ":*" as filename ...

Never try to access location $DE00-$DEFF, because internal configuration register latch up by any read or write command. This means, that data currently on the bus will trash the $de00 register.


This is the notorious $DExx-read bug on old Action Replay hardware. This bug is fixed on the RR-hardware.



Appendix A

64 kb only features

Features which are only available on the 64 kb version of the rom:

  • RR-Net
  • SilverSurfer
  • RAMLOAD in freezer. New RR hardware has more RAM and therefore allows real turbo-speed on load while being in freezer.
  • TASS
    • TASS is only available as plain RAM version on all CyberpunX Replay 3.x 64kb versions!

Appendix B

Programming Tips

Many people know this:

sei
lda #$00
sta $de00
jmp $fce2

This routine will take you straight to the powerup menu of the cart and is a rather nice way to quit your programs. LDA #$08 will take you straight to the Fastload Toolkit. If no Replay is present, a normal Reset will be performed.

We have been looking around in the sources to find useful routines but none were found we would recommend. It is not appreciated to use cartridge ROM routines as they are moving during releases!

Utilising the Retro Replay RAM

First a short note about the RAM Configuration. While being in Basic Toolkit the first bank of the cartridge is usually switched in. RAM sits from $8000 - $9fff 'under/over' the actual Cart Bank. When using the Disk Turbo the RAM will be used for buffering data. The same goes for most freezer operations, but still it's rather simple to use the additional RAM and I really hope some people come up with new interesting programs using the ram.

sei
lda #$23
sta $de00  ; turns RAM on at $8000, ROM Bank 0 at $e000
           ; use LDA #$20 to only turn on RAM at $8000

... do your stuff here ...

lda #$0a
sta $de00  ; back to first bank
cli
rts

THAT'S IT ! Simple, hm ??? Now tell me again programming RR is hard. :) WELL, a good idea is turn the screen off or wait for $d012 to be in the upper or lower border though.


Apendix C

Writing own extensions

When writing parameter extensions for the freezer you may want to access areas, which are currently backed up into the internal RAM. Therefore a (longish) routine is already installed in memory when being in Freeze-Mode, which does the address translation for you and gets the correct byte.

To check it out yourself, enter the monitor from the Freeze Menu and hit * to switch the RAM/ROM Config. Now you can disassemble the routine at $02a7.

That routine should be used on any accesses to ordinary RAM from $0000 to $1500 by your Parameter Extension. Zeropage $8e/$8f has to have the address you are looking for, Akku needs to have the value you want to write, Y-Register needs to be $00. JSR $02a7 and off it is. :) For reading a byte from the area mentioned before, JSR $02b3 does the trick.

In case you have code that is slowed down too much by these routines, just use $23 (or $20) on $de00 to turn the RAM on and $00 on $de00 to switch back to Bank 0 of the cart (Freezer-Bank). Please keep in mind, that you have to know more precisely what you are looking for when directly using $de00. (See Appendix C for more info.)

The user-area for your extension programs is from $0a00 to $1500.

ATTENTION! Programs exceeding $1500 will kill the memory of the frozen program from $1500 to the end of the extension.

Warning! Using the Pokefinder when having an extension loaded kills the memory page at $1000 on normal Action Replay and RR prior to Beta4.

As soon as you restart and the Disk Turbo is used, your extension is gone anyways. :) (Except for Retro Replay 64kb version from Beta4 and on.)

Hey, your extension filename needs to start with E. to have the loader recognize it. :) A simple RTS is enough to return to the freezer menu, but if you trashed the stack a JMP ($0334) may help aswell. Don't forget to re-enable Bank0 by writing $00 to $de00. As for the rest, you may do about anything you like. Just be aware that trashing the memory really affects the frozen RAM and that anything below $1500 needs to be accessed using the $02a7/$02b3 routines.


The following lines are taken from the prlink-source-code and will probably be what you have been waiting for ... :)

Old Action Replay hardware has one write-only I/O register at $de00-$deff. The ONE register is $de00.

Its bits are as follows:

Bit 7 - unused
Bit 6 - Resets FREEZE-mode (turns back to normal mode)
Bit 5 - 1=enable RAM at ROML ($8000) & I/O2 ($DF00, =$9F00-$9FFF)
Bit 4 - ROM bank selector high (A14)
Bit 3 - ROM bank selector low (A13)
Bit 2 - 1=disable cartridge (turn off the $de00 register)
Bit 1 - 1=-EXROM high
Bit 0 - 1=-GAME low


Retro Replay hardware has a compatible but heavily extended register-set.

$de00 write: This register is reset to $00 on a hard reset if not in flash
             mode. If in flash mode, it is set to $02 in order to prevent the
             computer from starting the normal cartridge.

             Bit 7 - controls bank-address 15 for ROM banking
             Bit 6 - must be set once to "1" after a successful freeze in order to set the correct memory map
                     and enable Bits 0 and 1 of this register. Otherwise no effect.
             Bit 5 - switches between ROM and RAM: 0=ROM, 1=RAM
             Bit 4 - controls bank-address 14 for ROM and RAM banking
             Bit 3 - controls bank-address 13 for ROM and RAM banking
             Bit 2 - Setting this bit will disable further write accesses to all registers & reset the c64 memory map
                     to standard, as if there is no cartridge installed at all.
             Bit 1 controls the EXROM line: A 0 will assert it, a 1 will deassert it.
             Bit 0 controls the GAME  line: A 1 asserts the line, a 0 will deassert it.


$de01 write: Extended control register. If not in Flash mode, this register
             can only be written to once. If in Flash mode, the REUcomp bit
             cannot be set, but the register will not be disabled by the
             first write. Bit 5 is always set to 0 if not in flash mode.

             Bit 7 - bank-address 15 for ROM (mirror of $de00)
             Bit 6 - REU compatibility bit. 0=standard memory map
                                            1=REU compatible memory map
             Bit 5 - bank-address 16 for ROM (only in flash mode)
             Bit 4 - bank-address 14 for RAM and ROM (mirror of $de00)
             Bit 3 - bank-address 13 for RAM and ROM (mirror of $de00)
             Bit 2 - NoFreeze   (1 disables Freeze function)
             Bit 1 - AllowBank  (1 allows banking of RAM in $df00/$de02 area)
             Bit 0 - enable accessory connector (SilverSurfer).


$de00 read or $de01 read:
             Bit 7 - feedback of banking bit 15
             Bit 6 - 1=REU compatible memory map active
             Bit 5 - feedback of banking bit 16
             Bit 4 - feedback of banking bit 14
             Bit 3 - feedback of banking bit 13
             Bit 2 - 1=Freeze button pressed
             Bit 1 - feedback of AllowBank bit 
             Bit 0 - 1=Flashmode active (jumper set)


To disable the cart: sei lda #$14 sta $de00 jsr $e453 cli rts should work pretty well.


This results in the values $00, $08, $10 and $18 for Banks 0,1,2 and 3. $80, $88, $90, $98 are used for Banks 4,5,6 and 7 on the new 64kb ROMs.

$0A in $de00 will take you to a safe basic environment.

The new registers take us to:


Appendix D

Memory Mapping

The newly introduced bits on the Retro Replay hardware allow some new fancy things and allow more compatibility with already existing hardware, but the experts should know about some things.

$de00/$df00 are the memory pages where a cartridge can have a memory page mapped in. Bit 6 of $de01 sets the page which is used to map in the IO-Page. Since this register is write once (except for bit 0), the cartridge reset routine usually sets this bit to its correct value. Whenever a REU-compatible memory map is used, $de10 to $deff will be used to map in a mirror of $9e10 to $9eff. $dfxx is free for REU then. The default for the RR hardware is to run with the IO area mapped to $df00-$dfff. This is Action Replay compatible behaviour and the mirror comes from $9f00 to $9fff then. The SilverSurfer serial interface uses registers from $de02 to $de0f when plugged in and activated. Therefore the routines in the IO areas (which are absolutely needed) have been shortened as much as possible and will require further optimizations aswell.

The RR-RAM is something special. Setting bit 5 of $de00 activates the RAM of your RR hardware, just like on AR hardware. While trying to use the banking bits 3 and 4 along with bit 5 has no effect on plain AR hardware, the new hardware will map in one of the four available 8kb RAM banks. Just like the ROM banks, the RAM is mapped in from $8000 to $9fff.


Bit 1 of $de01 allows you to select a more flexible RAM banking. If the AllowBank bit is not set, the $de02-$deff or $dfxx area will always mirror from bank 0 of the RAM, so the older cartridge images will work. With the bit set, the RR will use the selected RAM bank to map in the IO area.

We will currently keep this bit unset, since this gives the advantage that the upper 3 RAM banks can be used completely and not every time $100 hexbytes have to be wasted around $9e00/$9f00.

PLEASE NOTE that you should ONLY use the set/clear freeze and breakpoint commands from the monitor with their tokens!

I know many people writing the JSR $dfd3 manually, but since the adress will change, I recommend to keep this in mind!


A final word about the FLASH MODE: I was asked a few times already about how to access the complete 128kb ROM contents. The Flash Mode has another control bit at $de01 which is used to select all of the 128kb chip. It is not possible to use this bit during normal operation.