home *** CD-ROM | disk | FTP | other *** search
/ Suzy B Software 2 / Suzy B Software CD-ROM 2 (1994).iso / new_file / programm / a56 / a56.lzh / examples / sloader.lis < prev    next >
Encoding:
File List  |  1994-09-02  |  10.8 KB  |  248 lines

  1.               ; Originally taken from came from Motorola's Dr. BuB DSP board.
  2.               ; Obtained from Todd Day's FTP archive as sloader.asm
  3.               ; Modified for TDSG56 project by Quinn Jensen (jensenq@qcj.icon.com)
  4.               ;
  5.               ; Text from original:
  6.               ;       Serial Loader for the DSP56000.
  7.               ;       This loader initializes the serial communications interface (SCI)
  8.               ;       on the DSP56001 for 9600 baud and then loads OMF records (output
  9.               ;       by the DSP56000 assembler) into internal memory.  The loader takes
  10.               ;       the upper 128 bytes of P memory allowing the lower memory from
  11.               ;       $0000-(LDRMEM-1) to be used by the user.  The following records are
  12.               ;       interpreted:
  13.               ;           _DATA X ADDR
  14.               ;           _DATA Y ADDR
  15.               ;           _DATA P ADDR
  16.               ;           _END ADDR
  17.               ;       After the END record is encountered, the loader jumps to the address
  18.               ;       in the END record.  Note that an address MUST be present in the
  19.               ;       END record (the program must contain at least one P segment).
  20.               ;
  21.               ;       To generate a EPROM of this loader (8Kx8), perform the following:
  22.               ;       $ asm56000 -b -l -a sloader
  23.               ;       $ srec sloader
  24.               ;
  25.               ;       The EPROM is in file SLOADER.P.  To program the EPROM, set the
  26.               ;       programmer to MOTOROLA S record format, download the file with
  27.               ;       a zero address offset and program the part.
  28.               ;
  29.               ;       BTW, S record format is LSB MidSB MSB (what! Intel format? :-)
  30.               ;       Took me a few hours to figure this one out!  [Not really.  S records
  31.               ;       are big-endian, its just the 56001 boot loader that wants LSB first.
  32.               ;       -QJ]
  33.               ;
  34.               ;       If you don't have the program srec (where can I get this?),
  35.               ;       you have to do some gnarly contortions on the .LOD file.
  36.               ;
  37.               ;       So, if your .LOD file resulting from compiling this program
  38.               ;       looks like this:
  39.               ;
  40.               ;       _START SLOADER 0000 0000
  41.               ;
  42.               ;       _DATA P 0020
  43.               ;       010203 040506 070809
  44.               ;       _END 0020
  45.               ;
  46.               ;       then, program your PROM with this sequence:
  47.               ;       $0020   0302  0106  0504  0908  07..... etc. (Fun, eh? :)
  48.               ;
  49.               ;
  50.               ;       The loader loads the following memory spaces:
  51.               ;           X - 0 to FF
  52.               ;           Y - 0 to FF
  53.               ;           P - 0 to LDRMEM-1
  54.               ;
  55.                       PAGE    68,66,1,1
  56.               
  57. 00FFF0        SCR     EQU     $FFF0           ;SCI CONTROL REGISTER
  58. 00FFF2        SCCR    EQU     $FFF2           ;SCI CLOCK CONTROL REGISTER
  59. 00FFE1        PCC     EQU     $FFE1           ;PORT C CONTROL REGISTER
  60. 000002        RDRF    EQU     $2              ;RECEIVE DATA REGISTER FULL FLAG
  61. 00FFF1        SSR     EQU     $FFF1           ;SCI STATUS REGISTER
  62. 00FFF6        SRXH    EQU     $FFF6           ;SCI RECEIVE IN HIGH BYTE
  63. 00FFE0        PBC     equ     $FFE0           ;port B control
  64. 00FFE2        PBDDR   equ     $FFE2           ;port B data direction
  65. 00FFE4        PBD     equ     $FFE4           ;port B data
  66. 00FFFE        BCR     equ     $FFFE           ;port a bus control reg
  67.               
  68.               
  69. 000080        LDRMEM  EQU     $80             ;START OF LOADER IN P MEMORY
  70.               
  71.               
  72.               
  73. P:0000                ORG     P:$0000         ;RESET VECTOR FOR BOOTING
  74. P:0000        RVEC
  75. P:0000 0C0080         JMP     <LOAD           ;GO EXECUTE LOADER
  76.               
  77. P:0080                ORG     P:LDRMEM,P:3*LDRMEM
  78. P:0080        LOAD
  79. P:0080 08F4B0         MOVEP   #$0302,X:SCR    ;ENABLE TX,RX: 8 BIT 1 START, 1 STOP
  80. P:0081 000302
  81.               
  82.                                               ; *** You will probably have to
  83.                                               ; *** change the line below!
  84. P:0082 08F4B2         movep   #12,x:SCCR      ;CD=12 (/13), int clk @ 31.25 Kbaud-4%
  85. P:0083 00000C
  86. P:0084 08F4A1         MOVEP   #$0007,X:PCC    ;ENABLE SCI
  87. P:0085 000007
  88.               
  89.               
  90.               
  91. P:0086 08F4A4          movep  #0<<7,x:PBD
  92. P:0087 000000
  93. P:0088 08F4A0         movep   #0,x:PBC        ;port B: parallel I/O
  94. P:0089 000000
  95. P:008A 08F4A2         movep   #-1,x:PBDDR     ;port B: all output
  96. P:008B FFFFFF
  97. P:008C 0A7023         bset    #3,x:PBD        ;assert "ROM"; allows RAM to respond in P space
  98. P:008D 00FFE4
  99. P:008E 08F4BE         movep   #$2f2f,x:BCR    ;wait states: 0 for RAM, 15 for ROM and I/O
  100. P:008F 002F2F
  101. P:0090 08F4A4          movep  #$c<<7,x:PBD
  102. P:0091 000600
  103. P:0092 08F4A4          movep  #$c|3<<4<<7,x:PBD               ;clear strobes
  104. P:0093 00180C
  105.               
  106. P:0094        WTUS
  107. P:0094 0D00C2         JSR     <GETCH          ;INPUT CHARACTER
  108. P:0095 245F00         MOVE    #'_',X0         ;GET UNDERSCORE CHARACTER
  109. P:0096 200045         CMP     X0,A            ;SEE IF "_" YET
  110. P:0097 0E2094         JNE     <WTUS           ;NO
  111. P:0098        GOTUS
  112. P:0098 0D00C2         JSR     <GETCH          ;GET A CHARACTER
  113. P:0099 244400         MOVE    #'D',X0         ;GET A D FOR DATA
  114. P:009A 244545         CMP     X0,A    #'E',X0 ;COMPARE TO D, GET E
  115. P:009B 0EA0AA         JEQ     <DATAREC        ;IF "D", THEN DATA RECORD
  116. P:009C 200045         CMP     X0,A            ;SEE IF END RECORD
  117. P:009D 0E2094         JNE     <WTUS           ;NO, GO WAIT FOR ANOTHER UNDERSCORE
  118. P:009E        _WTSPC
  119. P:009E 08F4A4          movep  #$e<<7,x:PBD
  120. P:009F 000700
  121. P:00A0 0D00C2         JSR     <GETCH          ;GET CHARACTER
  122. P:00A1 242000         MOVE    #$20,X0         ;GET SPACE
  123. P:00A2 200045         CMP     X0,A            ;WAIT FOR SPACE AFTER "END"
  124. P:00A3 0E209E         JNE     <_WTSPC         ;WAIT FOR SPACE
  125. P:00A4 0D00CA         JSR     <IN4            ;GET TRANSFER ADDRESS
  126. P:00A5 21B000         MOVE    B1,R0           ;MOVE TRANSFER ADDRESS
  127. P:00A6 000000         NOP                     ;CLEAR ADDRESS PIPE
  128. P:00A7 08F4A4          movep  #$a<<7,x:PBD
  129. P:00A8 000500
  130. P:00A9 0AE080         JMP     (R0)            ;GO EXECUTE USER CODE
  131. P:00AA        DATAREC
  132. P:00AA 08F4A4          movep  #$d<<7,x:PBD
  133. P:00AB 000680
  134. P:00AC 0D00C2         JSR     <GETCH          ;GET CHARACTER
  135. P:00AD 242000         MOVE    #$20,X0         ;GET SPACE
  136. P:00AE 200045         CMP     X0,A            ;SEE IF SPACE
  137. P:00AF 0E20AA         JNE     <DATAREC        ;NO
  138. P:00B0 0D00C2         JSR     <GETCH          ;GET [P,X,Y]
  139. P:00B1 218600         MOVE    A1,Y0           ;SAVE CHARACTER
  140. P:00B2 0D00CA         JSR     <IN4            ;GET ADDRESS OF DATA RECORD
  141. P:00B3 21B000         MOVE    B1,R0           ;SAVE ADDRESS
  142. P:00B4 2E5800         MOVE            #'X',A  ;GET X
  143. P:00B5 2E5955         CMP     Y0,A    #'Y',A  ;SEE IF X, GET Y
  144. P:00B6 0EA0BC         JEQ     <_LDX           ;LOAD DATA INTO X MEMORY
  145. P:00B7 200055         CMP     Y0,A            ;SEE IF Y
  146. P:00B8 0EA0BF         JEQ     <_LDY           ;LOAD DATA INTO Y MEMORY
  147. P:00B9        _LDP
  148. P:00B9 0D00CF         JSR     <IN6            ;GET DATA
  149. P:00BA 07588D         MOVEM   B1,P:(R0)+      ;LOAD P MEMORY
  150. P:00BB 0C00B9         JMP     <_LDP
  151. P:00BC        _LDX
  152. P:00BC 0D00CF         JSR     <IN6            ;GET DATA
  153. P:00BD 555800         MOVE    B1,X:(R0)+      ;LOAD X MEMORY
  154. P:00BE 0C00BC         JMP     <_LDX
  155. P:00BF        _LDY
  156. P:00BF 0D00CF         JSR     <IN6            ;GET DATA
  157. P:00C0 5D5800         MOVE    B1,Y:(R0)+      ;LOAD Y MEMORY
  158. P:00C1 0C00BF         JMP     <_LDY
  159.               
  160. P:00C2        GETCH
  161. P:00C2 0AB182         JCLR    #RDRF,X:SSR,*   ;WAIT FOR DATA IN SCI
  162. P:00C3 0000C2
  163. P:00C4 084E36         MOVEP   X:SRXH,A        ;GET SCI DATA IN HIGH BYTE
  164. P:00C5 200033         LSL     A               ;SHIFT OUT PARITY
  165. P:00C6 200023         LSR     A               ;clear parity bit
  166. P:00C7 218E00         MOVE    A1,A            ;SIGN EXTEND AND ZERO
  167. P:00C8 08CE36         MOVEP   A,X:SRXH        ;put sci data in high byte
  168. P:00C9 00000C         RTS
  169. P:00CA        IN4
  170. P:00CA 08F4A4          movep  #$4<<7,x:PBD
  171. P:00CB 000200
  172. P:00CC 44F41B         CLR     B       #>4,X0  ;CLEAR VALUE, GET 4
  173. P:00CD 000004
  174. P:00CE 0C00D3         JMP     <READHEX        ;READ 4 HEX CHARACTERS
  175. P:00CF        IN6
  176. P:00CF 08F4A4          movep  #$6<<7,x:PBD
  177. P:00D0 000300
  178. P:00D1 44F41B         CLR     B       #>6,X0  ;CLEAR VALUE, GET 6
  179. P:00D2 000006
  180. P:00D3        READHEX
  181. P:00D3 06C400         DO      X0,_READHEX     ;READ ASCII HEX AND CONVERT TO BINARY
  182. P:00D4 0000E8
  183. P:00D5        _GET
  184. P:00D5 0D00C2         JSR     <GETCH          ;GET A CHARACTER
  185. P:00D6 245F00         MOVE    #'_',X0         ;GET UNDERSCORE
  186. P:00D7 244645         CMP     X0,A    #'F',X0 ;SEE IF UNDERSCORE
  187. P:00D8 0E20DC         JNE     <_NOTUS         ;NO
  188. P:00D9 00008C         ENDDO                   ;EXIT LOOP
  189. P:00DA 0444BC         MOVEC   SSH,X0          ;POP RETURN ADDRESS
  190. P:00DB 0C0098         JMP     <GOTUS          ;GO PROCESS NEW INPUT RECORD
  191. P:00DC        _NOTUS
  192. P:00DC 243045         CMP     X0,A    #'0',X0 ;SEE IF GREATER THAN F
  193. P:00DD 0E70D5         JGT     <_GET           ;YES, IGNORE
  194. P:00DE 200045         CMP     X0,A            ;SEE IF LESS THAN 0
  195. P:00DF 0E90D5         JLT     <_GET           ;YES, IGNORE
  196. P:00E0 240A44         SUB     X0,A    #10,X0  ;ADJUST FOR ASCII TO BINARY
  197. P:00E1 240745         CMP     X0,A    #7,X0   ;SEE IF A-F
  198. P:00E2 0E90E4         JLT     <_NOTALPHA      ;NO
  199. P:00E3 200044         SUB     X0,A            ;ADJUST FOR 1-F
  200. P:00E4        _NOTALPHA
  201. P:00E4 0604A0         REP     #4              ;SHIFT OLD VALUE LEFT 1 NIBBLE
  202. P:00E5 20003B         LSL     B
  203. P:00E6 0610A0         REP     #16             ;SHIFT NEW NIBBLE DOWN TO LSB
  204. P:00E7 200023         LSR     A
  205. P:00E8 200018         ADD     A,B             ;ADD NEW NIBBLE IN
  206. P:00E9        _READHEX
  207. P:00E9 00000C         RTS
  208.                       END
  209.               
  210.  
  211. Summary of psect usage
  212.  
  213.                  section seg base last top      used       avail    total
  214. -------------------------------------------------------------------------
  215.  
  216.  
  217. Symbol Table
  218. -------------------------------------
  219.              SSR 00FFF1
  220.              BCR 00FFFE
  221.             SRXH 00FFF6
  222.            GETCH 0000C2
  223.             WTUS 000094
  224.             LOAD 000080
  225.             RVEC 000000
  226.          DATAREC 0000AA
  227.              IN6 0000CF
  228.              IN4 0000CA
  229.           _WTSPC 00009E
  230.            GOTUS 000098
  231.           LDRMEM 000080
  232.         _READHEX 0000E9
  233.             SCCR 00FFF2
  234.              SCR 00FFF0
  235.        _NOTALPHA 0000E4
  236.           _NOTUS 0000DC
  237.              PBD 00FFE4
  238.            PBDDR 00FFE2
  239.              PBC 00FFE0
  240.             _LDY 0000BF
  241.             _LDX 0000BC
  242.             _LDP 0000B9
  243.              PCC 00FFE1
  244.             RDRF 000002
  245.          READHEX 0000D3
  246.             _GET 0000D5
  247. errors=0
  248.