***********************************************************************
* Example 3-1                                       ~ 65 bytes total  *
*                                                                     *
*  This example program uses the hardware setup in figure 3-1 in test *
* mode.  After reset the CONFIG register is checked against port E.   *
* If it is different, CONFIG is erased and reprogrammed to the port E *
* value.  $30 is written to port A and the program ends.              *
***********************************************************************

       ORG   $A000      Start of external EPROM

EX31A  LDS   #$00FF     Establish top of stack
       BSR   DLY10      Allow charge pump to stabilize
       LDAA  $100A      Read port E DIP switches
       ANDA  $#0F       Mask off upper 4 bits (not implimented on 'A8)
       CMPA  $103F      See if CONFIG is same
       BNE   NOWOK      If already OK
* Not OK so first erase CONFIG
       LDAB  #$06       Bulk Erase, and EELAT on
       STAB  $103B      Write to PPROG register
       STAA  $103F      Write to CONFIG address (any data)
       INCB             To $07 - turns on EEPGM bit
       STAB  $103B      Write to PPROG register
       BSR   DLY10      Delay 10 mS for erase to complete
       CLR   $103B      Turn off charge pump (EEPGM to 0)
* Now reprogram CONFIG with data from port E (still in A-reg)
       LDAB  #$02       Turn on EELAT
       STAB  $103B      Write to PPROG register
       STAA  $103F      Write port E data to CONFIG address
       INCB             To $03 - Turns on EEPGM bit
       STAB  $103B      Write to PPROG register
       BSR   DLY10      Delay 10 mS for erase to complete
       CLR   $103B      Turn off charge pump (EEPGM to 0)
* Programming complete but you can't check results till next reset
NOWOK  LDA   #$30
       STAA  $1000      You are done (check with scope)
       BRA   *          Branch to self (hangs till pwr off or rst)
*
*  PROGRAM END     subroutines follow
*
***
* DLY10 - Subroutine to delay 10mS (for E=2MHz)
***
DLY10  PSHX             Save X (not required in this ex I just do)
       LDX   #$0D06     3334 * 6~ * 500nS/~ = 10mS
DLOOP  DEX              [3] # in []s is cycles for that instruc
       BNE   DLOOP      [3] cont. for 3334 times (loop time = 6~)
       PULX             Recover X value
       RTS              ** RETURN **
*
*  Establish a reset vector
*
       ORG   $BFFE
RESET  FDB   $A000      Point to start of program

