home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / hc11dev / scixirq / talker51.asc < prev    next >
Text File  |  1995-02-27  |  6KB  |  159 lines

  1. ************************ TALKER51.ASC 10/6/88 ****************************
  2. *   Written by R.Soja, Motorola, East Kilbride                           *
  3. *   Motorola Copyright 1988                                              *
  4. *   MCU resident, Interrupt driven Communication routines for HC11JC     *
  5. *   monitor. Provides low level memory and stack read/write operations.  *
  6. *   Works with Host user interface program PCBUG11.EXE and 65C51 ACIA.   *
  7. *
  8. * CONSTANTS
  9. MEMOFFSET equ $0000
  10. TALKBASE  equ $FF00-MEMOFFSET
  11. TALKVECT  equ $FFF4-MEMOFFSET
  12. ACIA      equ $8000
  13. uS500     equ 5000/35     500uS delay with DEY/BNE loop
  14. BRKCODE   equ $4A         Break point signal code to host.
  15. BRKACK    equ $B5         Break point acknowledge code from host.
  16. *
  17. * ACIA MASKS
  18. TDRE      equ $10
  19. RDRF      equ $08
  20. *
  21. * PROGRAM
  22.           org TALKBASE
  23. *
  24. TALKSTART EQU *
  25.           LDS #$1FF
  26.           LDD #$C91E    Init ACIA to 9600 baud, 8 bit, no parity, Rx intr.
  27.           STD ACIA+2    Note: Control reg set up for 1.843MHz xtal.
  28. *
  29. USERSTART EQU *         This is entry point of user defined reset.
  30.           TPA           XIRQ must be enabled (Clear X bit in CCR)
  31.           ANDA #$BF
  32.           TAP
  33. IDLE      JMP IDLE+MEMOFFSET   Now hang around for interruption from host.
  34. * A RESET from host changes above jump destination to start of user code.
  35. *
  36. XIRQSRV   EQU *
  37.           LDAA ACIA+1   If ACIA has generated interrupt, then
  38.           BMI TXIRQ     Talker code processes received data
  39.           JMP >TXIRQEX+MEMOFFSET
  40. * Above 3 bytes are replaced by JMP USERXIRQ instruction from host monitor, if
  41. * user specified XIRQ vector is detected during download of user code.
  42. *
  43. XIRQUJMP  EQU *-2       Label equates to JMP operand.
  44. *
  45. TXIRQ     EQU *
  46.           LDAA ACIA     Read command byte, & echo it as acknowledge
  47.           BSR OUTACIA   to host.
  48.           BMI INH1      If command bit 7 set, then process inherent command
  49.           BSR INACIA    else read byte count from host into ACCB.(0=256)
  50.           XGDX          Save command and byte count.
  51.           BSR INACIA    Read high address byte
  52.           TBA           into ACCA
  53.           BSR INACIA    then low address byte into ACCB
  54.           XGDX          Restore command in ACCA,count in ACCB,address in X
  55.           CMPA #$01
  56.           BNE TXIRQ1    If command is memory read, then
  57. *
  58. TREADMEM  EQU *         REPEAT
  59.           LDAA ,X       read required address
  60.           BSR OUTACIA   send it to host
  61.           TBA           (save byte count)
  62.           BSR INACIA    and wait for acknowledge
  63.           TAB           (restore byte count)
  64.           INX           Increment address
  65.           DECB          Decrement byte count
  66.           BNE TREADMEM  UNTIL all done
  67.           RTI           and return to idle loop or user code.
  68. *
  69. TXIRQ1    EQU *
  70.           CMPA #$41
  71.           BNE TXIRQEX   If command is memory write then
  72. *
  73.           TBA           move byte count to ACCA
  74. TWRITMEM  EQU *         REPEAT
  75.           BSR INACIA    Read next byte from host into ACCB,
  76.           STAB ,X       and store at required address.
  77.           LDY #$0001    Set up wait loop to allow for 28C64 prog time, where
  78. WAITPOLL  DEY           Y operand must be manually set to $0359 (3mS)
  79.           BNE WAITPOLL
  80.           LDAB ,X       Read stored byte and
  81.           STAB ACIA     echo it back to host,
  82.           INX
  83.           DECA          Decrement byte count
  84.           BNE TWRITMEM  UNTIL all done
  85. TXIRQEX   RTI           and return
  86. *
  87. INACIA    EQU *
  88.           LDAB ACIA+1   Wait for RDRF=1
  89.           ANDB #RDRF
  90.           BEQ INACIA
  91.           LDAB ACIA     then read data received from host
  92.           RTS           and return with data in ACCB
  93. *
  94. OUTACIA   EQU *         Only register Y modified.
  95.           XGDY          Enter with data to send in ACCA.
  96. OUTACIA1  LDAA ACIA+1
  97.           ANDA #TDRE
  98.           BEQ OUTACIA1
  99.           XGDY
  100.           STAA ACIA     Important - Updates CCR!
  101.           RTS
  102. *
  103. INH1      EQU *
  104.           CMPA #$81     If command is read MCU registers then
  105.           BNE INH2
  106. *
  107. INH1A     TSX           Move stack pointer to X
  108.           XGDX          then to ACCD
  109.           BSR OUTACIA   send stack pointer to host (high byte first)
  110.           TBA
  111.           BSR OUTACIA   then low byte
  112.           TSX           Restore X (=stack pointer)
  113.           LDAB #9       then return 9 bytes on stack
  114.           BRA TREADMEM  i.e. CCR,ACCB,ACCA,IXH,IXL,IYH,IYL,PCH,PCL
  115. *
  116. INH2      EQU *
  117.           CMPA #$C1     If command is write MCU registers then
  118.           BNE SWISRV1
  119. *
  120.           BSR INACIA    get stack pointer from host (High byte first)
  121.           TBA
  122.           BSR INACIA
  123.           XGDX          Move to X reg
  124.           TXS           and copy to stack pointer
  125.           LDAA #9       Then put next 9 bytes from host on to stack
  126.           BRA TWRITMEM
  127. *
  128. SWISRV    EQU *         Breakpoints generated by host-placed SWI instruction.
  129.           LDAA #BRKCODE Force host to process breakpoints
  130.           BSR OUTACIA   by sending it the break signal
  131. SWIIDLE   BRA SWIIDLE   then wait for response from host. (Ibit=1,Xbit=0)
  132. *
  133. SWISRV1   EQU *
  134.           CMPA #BRKACK  If host has acknowledged breakpoint state then
  135.           BNE TXIRQEX
  136.           TSX           move stack pointer to SWI stack frame and
  137.           LDAB #9
  138.           ABX
  139.           TXS
  140.           LDD 7,X       Send user code breakpoint return address to host
  141.           BSR OUTACIA   (high byte first)
  142.           TBA
  143.           BSR OUTACIA   (low byte next)
  144.           LDD #IDLE+MEMOFFSET force idle loop on return from breakpoint processing
  145.           STD 7,X
  146.           BRA INH1A     but first return all MCU registers to host
  147. *
  148. ILLOPSRV  equ *
  149.           STOP
  150.           BRA ILLOPSRV
  151. *
  152.           org TALKVECT
  153.           FDB XIRQSRV+MEMOFFSET
  154.           FDB TXIRQEX+MEMOFFSET   SWI (Changed by Break and Trace monitor cmds)
  155.           FDB ILLOPSRV+MEMOFFSET
  156.           FDB TXIRQEX+MEMOFFSET   COP Software fail (Unused)
  157.           FDB TXIRQEX+MEMOFFSET   COP Clock Monitor fail (Reassigned by PCBUG11 Reset)
  158.           FDB TALKSTART+MEMOFFSET
  159.           END