;**********************************************
;*                                            *
;*                   BUS.M68                  *
;*   Displays The Contents of the S-100 Bus   *
;*                                            *
;*       David F. Pallmann, 30-May-84         *
;*                                            *
;**********************************************

       SEARCH  SYS
       SEARCH  SYSSYM

START:  PHDR    -2,0,PH$REE!PH$REU      ;program header

CHECK:  MOV     SYSTEM,D0               ;D0 contains system status bits
       AND     #SY$CPA,D0              ;check AM1000 bit
       BEQ     HEADER                  ;branch if clear (AM100/L)
       TYPECR  <? this is an AM1000, it has no bus>
       JMP     EXIT                    ;exit

HEADER: TYPECR  The bus contains the following:
       CRLF                            ;newline

TYPCPU: TAB                             ;tab
       TTYL    CPU                     ;safe to assume system has a CPU
       CRLF                            ;newline

TYPMEM: TAB                             ;tab
       MOV     MEMEND,D1               ;D1 contains amount of memory
       DIV     D1,#1024.               ;divide by 1K
       AND     #177777,D1              ;mask D1 to low-order word
       DCVT    0,OT$TRM                ;output D1 in decimal
       TTYL    MEM                     ;type: K bytes
       CRLF                            ;newline

BOARDS: LEA     A0,IOTABL               ;A0 points to I/O address
       LEA     A1,TXTABL               ;A1 points to device description text

LOOP:   CTRLC   EXIT                    ;branch on ^C
       MOV     (A0)+,D0                ;D0 contains I/O address
       BEQ     EXIT                    ;branch on zero (end of table)
       MOV     D0,A2                   ;A2 contains I/O address
       CMPB    @A2,#-1                 ;is a board occupying I/O address?
       BEQ     NEXT                    ; no
       TAB                             ;tab
       TTYL    @A1                     ;type out device text
       CRLF                            ;newline

NEXT:   TSTB    (A1)+                   ;advance to next
       BNE     NEXT                    ; description
       BR      LOOP                    ;process next device

EXIT:   CRLF                            ;newline
       EXIT                            ;exit

;table of I/O addresses

IOTABL: LWORD   ^H0FFFE00               ;SSD
       LWORD   ^H0FFFF04               ;AM120
       LWORD   ^H0FFFF70               ;DR200
       LWORD   ^H0FFFFF0               ;AM210
       LWORD   ^H0FFFFF8               ;AM300
       LWORD   ^H0FFFFE8               ;AM300 #2
       LWORD   ^H0FFFFD8               ;AM300 #3
       LWORD   ^H0FFFF68               ;AM300 #4
       LWORD   ^H0FFFF60               ;AM300 #5
       LWORD   ^H0FFFFB0               ;AM310
       LWORD   ^H0FFFFB4               ;AM310 #2
       LWORD   ^H0FFFFB8               ;AM310 #3
       LWORD   ^H0FFFFC2               ;AM320
       LWORD   ^H0FFFF85               ;AM330
       LWORD   ^H0FFFFD0               ;AM410/AM415
       LWORD   ^H0FFFFC4               ;AM420
       LWORD   ^H0FFFFC0               ;AM500
       LWORD   ^H0FFFFA0               ;AM600
       LWORD   ^H0FFFFD4               ;AM610
       LWORD   ^H0FFFF0D               ;AM620
       LWORD   0

;text constants

CPU:    ASCIZ   'AM-100/L 68000-based CPU (2-port serial)'
MEM:    ASCIZ   'K bytes of memory'

;table of I/O device descriptions
;items in this table must appear in the same order as their addresses do
; in IOTABL.

TXTABL: ASCIZ   'software security device'
       ASCIZ   'AM-120 2-port serial (1-port parallel) I/O board'
       ASCIZ   'DR-200 16-port serial I/O board'
       ASCIZ   'AM-210 floppy disk controller'
       ASCIZ   'AM-300 6-port serial I/O board'
       ASCIZ   'AM-300 6-port serial I/O board #2'
       ASCIZ   'AM-300 6-port serial I/O board #3'
       ASCIZ   'AM-300 6-port serial I/O board #4'
       ASCIZ   'AM-300 6-port serial I/O board #5'
       ASCIZ   'AM-310 4-port serial I/O board'
       ASCIZ   'AM-310 4-port serial I/O board #2'
       ASCIZ   'AM-310 4-port serial I/O board #3'
       ASCIZ   'AM-320 line printer interface'
       ASCIZ   'AM-330 communications board'
       ASCIZ   'AM-410 or AM-415 SMD disk controller'
       ASCIZ   'AM-420 Priam disk controller'
       ASCIZ   'AM-500 Hawk disk controller'
       ASCIZ   'AM-600 magtape interface'
       ASCIZ   'AM-610 VCR interface'
       ASCIZ   'AM-620 streamer tape drive'
       EVEN

       END