💾 Archived View for spam.works › mirrors › textfiles › apple › CRACKING › adtech.txt captured on 2023-06-16 at 21:12:12.

View Raw

More Information

-=-=-=-=-=-=-

                         TECH-NOTES FOR
                     Advanced Demuffin 1.1

                          Written  by
                           The Stack

                         Copyright 1983
                       Corrupt Computing

If you want source code for any of Corrupt Computing's line of
utilities, just contact THE INSPECTOR on THE TWILIGHT PHONE.

================================================================

ZERO PAGE LOCATIONS

  $22  WNDTOP   These 2 zero page locations, WNDTOP and WNDBTM,
  $23  WNDBTM    are used so that the character that the
                 character output routines in the monitor will
                 output characters only in the window below the
                 first 3 lines and above the bottom 2 lines.
                 The top 3 and bottom 2 lines are used for title
                 lines and status display.  These locations
                 should be restored to normal upon return from
                 your RWTS if it uses them, although most RWTS's
                 don't use these reserved monitor locations.


  $26  GBASL    These 2 zero page locations are used by many
  $27  GBASH     routines throughout Advanced Demuffin, such as
                 the PRINT routine and the routines to display
                 the status codes on the disk map, but they do
                 not need to be saved before going to your RWTS.
                 Many RWTS's, including RWTS 3.3, use these
                 locations in several places.


  $36  CSWL     CSWL and CSWH should always point to the address
  $37  CSWH      of the current character output routine.
                 Advanced Demuffin sets these locations to point
                 to $FDF0, the standard character output
                 routine.  Note that the outputed characters
                 will no longer go through DOS as there may be
                 no DOS in the machine.  Advanced Demuffin
                 changes the contents of these locations to
                 point to $Cx00 when a number from 1-7 is
                 pressed during a conversion or after a
                 conversion is completed, where x is the number
                 pressed.  These locations should be restored to
                 point to $FDF0 if your RWTS uses them in any
                 way.  Most RWTS's, including RWTS 3.3, don't
                 use them at all.


  $4A  TEMP1    Although most RWTS's don't use these locations,
  $4B  TEMP2     they are used as scratch locations by Advanced
  $4C  TEMP3     Demuffin and are VERY IMPORTANT!  Be sure and
                 save them if your RWTS even looks at them.  The
                 most important location to save is $4B, which
                 contains the page number that the current
                 sector is being loaded into.  Note that this is
                 a duplicate of the X register upon entry into
                 the user's IOB module at $1400.


PRE-PROGRAM NON-ZERO PAGE LOCATIONS

 $200  BUF      Page 2, the character input buffer, is used as a
                 buffer to hold the file name of the RWTS or IOB
                 module to be loaded.  This page may be used by
                 your RWTS, but your RWTS may not reside in the
                 area between $200-$21E (unless you don't plan
                 on loading anything), as this portion of page 2
                 will be destroyed upon a load.


 $3F2  RESET    Advanced Demuffin sets this pointer to pnint to
                 $FF59.  This means that whenever the RESET key
                 is pressed, the Apple will jump into the
                 monitor.  If this is not desired, $12C9 (low
                 byte) and $12CE (high byte) may be changed to
                 have the RESET key go wherever you want it to
                 go including $801 (Advanced Demuffin entry).
                 $12C9 normally contains a $59 and $12CE
                 normally contains an $FF.


 $3F5  AMPVEC   Advanced Demuffin sets up these locations to
 $3F8  CTYVEC    jump to the Advanced Demuffin entry point
                 ($801) when Applesoft recieved the "&" command
                 and when the monitor recieved the CTRL-Y
                 command.  This provides a useful way to get
                 back into Advanced Demuffin after exit.


 $400-$7FF      Many times Advanced Demuffin displays data and
                 status marks on the screen by storing this data
                 directly into this area of memory.  This
                 includes all marks on both the track map and
                 the disk map as well as numbers on the bottom
                 screen line, and dashes and other messages on
                 the 3rd and 23rd lines.






INTER-PROGRAM LOCATIONS

 $800           This is the location where Advanced Demuffin is
                 designed to run at.  This location contains an
                 $EA (NOP) as the byte at $800 is often replaced
                 by a $00.  This is NOT the entry point to
                 Advanced Demuffin ($801 is the entry) although
                 if there is an $EA here it won't make any
                 difference if you use this as the entry.


 $801  START0   This is the entry point to Advanced Demuffin 1.1
                 where there are two instructions, SEI and CLD,
                 before the actual START of Advanced Demuffin.


 $803  START    This is the actual start of the program which
                 sets CSWL and CSWH to point to the monitor
                 routine COUT1, sets the RESET, AMPVEC, and
                 CTYVEC as mentioned above (see appropriate
                 label), sets the full screen as a window except
                 for the top 3 and the bottom 2 lines, clears
                 the screen, puts the title at the top, the
                 status line at bottom, and starts off the
                 program by displaying the menu.


 $F1E  IOB      This is the IOB that Advanced Demuffin uses when
                 it uses RWTS.  The built-in IOB module (IOB33)
                 which is described below, as well as the
                 default user IOB module (at $1400) also use
                 this IOB.  The default contents of this IOB are
                 described in detail below:

 $F1E:01 60     IOB      DFB $01,$60
 $F20:01        DRIVE    DFB $01
 $F21:00        VOLUME   DFB $00
 $F22:00        TRACK    DFB $00
 $F23:00        SECTOR   DFB $00
 $F24:2F 0F              DW DCT
 $F26:00        DPAGL    DFB $00
 $F27:80        DPAG     DFB $80
 $F28:00 00              DFB $00,$00
 $F2A:01        CODE     DFB $01
 $F2B:00        ERROR    DFB $00
 $F2C:00 60 01           DFB $00,$60,$01
 $F2F:00 01     DCT      DFB $00,$01
 $F31:EF D8              DFB $EF,D8

Note that the slot number used by Advanced Demuffin could easily
 be changed bu changing $F1F to the $x0 where x is the slot
 number of the desired drive.


 $F33  IOB33    This is the built-in IOB module used to write to
                 3.3 formatted disks.  A disassembled listing of
                 it is included below:

 $F33- IOB33  STY SECTOR    ;Store sector
 $F36-        STX DPAG      ;and page number
 $F39-        LSR A         ;Convert phase # to track #
 $F3A-        STA TRACK     ;and store it
 $F3D-        LDA DRV       ;Check # of drives
 $F40-        STA DRIVE     ;and store it as drive to write to
 $F43- THERE  LDA #2        ;Set command code to write
 $F45-        STA CODE      ;and store it
 $F48-        JSR GORWTS    ;and go to 3.3 RWTS to write it
 $F4B-        LDA #1        ;Restore read
 $F4D-        STA CODE      ;command code
 $F50-        LDA ERROR     ;Check for an error
 $F53-        BCC RTS4      ;Exit if none
 $F55-        CMP #$10      ;Write protect error?
 $F57-        SEC           ;Keep carry set
 $F58-        BNE RTS4      ;Not write protect, exit w/carry set
 $F5A-        LDY #$27      ;Display write protected
 $F5C- MOV4   LDA WPER1,Y   ;error message
 $F5F-        STA SCLN1,Y   ;and ask whether
 $F62-        LDA WPER2,Y   ;to continue or
 $F65-        STA SCLN2,Y   ;start over
 $F68-        DEY
 $F69-        BPL MOV4
 $F6B-        JSR PRINT     ;Print 3 beeps
 $F6E-        DFB $07,$07,$87
 $F71- KEY10  JSR KEYIN     ;Read a key - go back to menu if esc
 $F74-        CMP #$C3      ;Continue?
 $F76-        BEQ CONTIN    ;Yes, branch
 $F78-        CMP #$D3      ;Start over?
 $F7A-        BNE KEY10     ;No
 $F7C-        PLA           ;Yes
 $F7D-        PLA           ;Pull return address off stack
 $F7E-        JSR REPLNS    ;Replace top 2 lines w/ title lines
 $F81-        JMP GOTVAL    ;Starts over
 $F84- CONTIN JSR REPLNS
 $F87-        BMI THERE     ;Always taken


$13FA-$13FB     These 2 bytes are unused


$13FC-$13FF     These 4 bytes are reserved for the address and
                 the length of the IOB module when it is being
                 loaded.  Advanced Demuffin loads the first
                 sector from the track/sector list of the IOB
                 module at $13FC.  Since the first 4 bytes of
                 this sector contain the address and the length
                 of the file, those bytes reside in these
                 locations.  Therefore, the actual IOB module
                 will start at $1400 (just below).
$1400  IOBM     This is the user IOB module.  The LOAD NEW IOB
                 MODULE will load a file into this area (see
                 above).  A disassembled listing of the default
                 user IOB module is included in the main manual.


$1419-$14FB     These bytes between the user IOB module and RWTS
                 3.3 are left free for an IOB module longer than
                 the default one.  This allows an IOB module to
                 take up as much as $FC bytes total.


$14FC-$14FF     These 4 bytes are unused.


$1500-$1CDB     RWTS 3.3 resides in this area of memory.  It is
                 just standard RWTS that has been relocated to
                 run at this address.  Advanced Demuffin uses
                 the entry at $1A00.


Below are some other locations used as scratch by Advanced
 Demuffin.  These may be looked at by your IOB module in
 determining various options about how it is to read sectors
 from the source disk if desired.

$1CE0  SCVER    This location contains either a $0C or a $0F
                 for 13 and 16 sector modes, respectively.

$1CE1  STPHS    This location contains phase number to start
                 reading data from the disk with.  It defaults
                 to $00.  (Since it is a phase #, a $01 would
                 mean track .5, etc.)

$1CE2  ENPHS    ENPHS is the same as STPHS except that it
                 contains the last phase to read data from.

$1CE3  STSEC    STSEC contains the first sector within the phase
                 specified by STPHS that data should be read
                 from.

$1CE4  ENSEC    ENSEC contains the last sector within the phase
                 specified by ENPHS that data should be read
                 from.

$1CE5  CRPHS    This location contains the current phase that
                 data is being read from.

$1CE6  CRSEC    This location contains the current sector that
                 data is being read from.

$1CE7  BGSEC    BGSEC contains the sector number within the
                 phase specified by BGPHS (below) that data has
                 started being read from this pass.  i.e. If you
                 are converting an entire 16 sector disk with
                 the default options and the default buffer size
                 ($70 pages), during the first pass BGPHS and
                 BGSEC will both contain a $00 (phase 00, sector
                 00 was the start phase, sector in this pass).
                 During the second pass, BGPHS and BGSEC will
                 contain $0E and $00, respectively.  (The second
                 pass started with track 07, sector 00 and track
                 07 is phase $0E).

$1CE8  BGPHS    See above.

$1CE9  BYPHS    This byte contains the increment in phases.
                i.e. The default increment, 1.0, would be $02.

$1CEA  NRETRY   This byte contains the maximum number of retries
                 (normally $01).

$1CEB  RETRY    This byte is used as a counter counting down
                 from the maximum number of retries to $00.  On
                 the first attempt to read a sector, RETRY will
                 equal NRETRY.  If the carry is set upon return
                 from the user's IOB module, RETRY will be
                 decreased.  If it is less than zero, a read
                 error will result.  If not, a read will be re-
                 attempted.  This process will continue until
                 the sector either reads correctly or until
                 RETRY is less than zero.

$1CEC  DRV      This location contains either a one or a two
                 respective to the number of drives being used.
                 The built-in IOB module uses this location to
                 determine which drive to write data to.

$1CED-$1CEF     These 3 bytes are unused

$1CF0  BUFST    BUFST contains the page number of the start of
                 the buffer.  This buffer is used to store data
                 read off the source disk.  By changing this
                 location and/or BUFEN (below) you can easily
                 change the buffer size and the location of
                 Advanced Demuffin's buffer.  This location
                 normally contains a $20 meaning that the buffer
                 normally starts at $2000.

$1CF1  BUFEN    BUFEN contains the page number of the first page
                 not to be included in Advanced Demuffin's
                 buffer (see above).  i.e. If this location
                 contained a $90 (the default value) and BUFST
                 (see above) contained a $20 (the default again)
                 the buffer would reside from $2000 to $8FFF
                 (which it normally does).  However, this
                 byte may be changed from a $90 to another
                 value, such as a $B8, making the buffer much
                 larger.  In this example, your buffer would be
                 $9800 bytes long!  This will, of course, erase
                 DOS when you attempt to convert the disk; but
                 no problem - Advanced Demuffin does not require
                 DOS anyway. (Not even for loading RWTS and IOB
                 modules!)  Another use for changing this byte
                 the one before it is to move the buffer to a
                 different place.  i.e. If you had a hi-res
                 screen on hi-res page 1 ($2000-$3FFF) that you
                 wanted to keep in memory, you could simply
                 change BUFST ($1CF0) to $40, forcing the buffer
                 to start at $4000 instead of $2000 - saving
                 your screen.

$1F00  DIRSEC   This page is used as a scratch page when loading
                 sectors from the disk.  i.e. When loading a
                 RWTS or an IOB module, the directory sector
                 containing the name of the file to load will be
                 read into this page.  The track and sector of
                 the track/sector list will be found and the
                 track/sector list will then be loaded here.

$BD00  USRRWTS  This is address JuMPed to by the default user
                 RWTS.  You should either have an RWTS here or
                 the IOB module should be changed to point to a
                 different location.  Note the $BD00 does not
                 necessarily have to be the start of the RWTS
                 when using the default user IOB module, it must
                 be the ENTRY POINT of the RWTS.  In fact, most
                 RWTS's have a STARTING ADDRESS of $B800 but an
                 ENTRY POINT at $BD00.  Keep this in mind when
                 you load an RWTS module from disk.

$C000  KEYBD    These are the only hardware locations used by
$C010  KEYCLR    Advanced Demuffin other than during the screen
                 dump where $Cx00 is JSRed to (where x is the
                 slot number).


The following monitor routines are used by Advanced Demuffin:

$F847  GBASCALC
$FB2F  INIT
$FC58  HOME
$FD8E  CROUT
$FDED  COUT
$FDF0  COUT1
$FF59  MONITOR