


       NAM FDISK
*      REV. 1.0 BY MOTOROLA MICROSYSTEMS APRIL 1977
       SPC 1
*      BY: HERVE TIREFORD
*          MOTOROLA SEMICONDUCTOR PRODUCTS
       SPC 3
*      ------------------------------------------
*      THE FOLLOWING PROGRAM ALLOWS THE USER TO
*      DUMP THE CONTENTS OF MEMORY ONTO AN
*      EDOS2 STRUCTURED DISKETTE IN THE MOTOROLA
*      DEFINED FORMAT (S0, S1, S9).
       SPC 1
*      IT IS ASSUMED THAT:
*      
*        1- THE USER'S CODE IS OUTSIDE THE FIRST
*           K OF MEMORY SINCE THE DUMP PROGRAM
*           RESIDES IN THIS AREA. SHOULD THE USER'S
*           PROGRAM BE IN THIS AREA, ONE CAN RECO-
*           VER FROM THIS SITUATION BY MERELY SHIF-
*           TING THE USER'S CODE USING THE SWITCHES
*           THAT ARE LOCATED ON THE EDGE OF THE ME-
*           MORY CARDS AND THEN LOAD THE DUMP PGM.
*
*        2- THE OBJECT CODE IS OUTPUTTED TO THE
*           DISKETTE IN THE DRIVE UNIT 0.
*      
*        3- THE DIALOG BETWEEN THE USER AND THE
*           DUMP PROGRAM IS THE SAME AS WHEN INI-
*           TIATING THE EXBUG PUNCH ROUTINE. NOTE
*           THAT THE HEADER IS USED AS FILENAME FOR
*           THE OBJECT CODE THAT IS GENERATED.
*      
*        4- PGM STARTING ADDRESS = 100.
       PAGE
       OPT O
       SPC 1
*      TEMPORARY EDOS STORAGE
       SPC 1
ISIZE  EQU $4
ITRK   EQU 6
ISCTR  EQU 7
ICNTR  EQU 8
OSIZE  EQU $9
OTRK   EQU 11
OSCTR  EQU 12
OCNTR  EQU 13
TISIZE EQU 15
       SPC 1
*      EDOS UTILITY ROUTINES
       SPC 1
RI     EQU $E809
WRT    EQU $E80C
       SPC 1
*      FILE DIRECTORY STORAGE AREA
       SPC 1
       ORG $100
       JMP START
       SPC 1
BUF1   RMB 128
       SPC 1
*      EXBUG EQUATES
BEGEND EQU $F003
BUF    EQU $FF8D
INCHNP EQU $F015
BEGA   EQU $FF0A
TW     EQU $FF5A
ENDA   EQU $FF0C
MCONT  EQU $FF58
TEMP   EQU $FF07
CHEXL  EQU $F009
CHEXR  EQU $F00C
PDATA  EQU $F024
       SPC 2
XTEMP  RMB 2
XTEMP3 RMB 2
STEMP  RMB 2
       SPC 1
       SPC 1
START  LDS #STACK INITLZ STACK POINTER
       LDX #TEXT1
       JSR PDATA
       LDX #24
       STX ISIZE PREPARE TO READ FROM DISK
       CLR ITRK
       LDA A #3
       STA A ISCTR
       SPC 1
*      READ FILE DIRCTORY INTO BUF1
       SPC 1
LOOP3   CLR ICNTR
       LDA B #128
       LDX #BUF1
LOOP   STX XTEMP
       PSH B
       JSR RI
       BCS NTFND
       LDX XTEMP
       STA A X
       INX
       PUL B
       DEC B
       BNE LOOP
       SPC 1
*      SEARCH BUF1 FOR AN ATTRIBUTE OF $FF
       SPC 1
       LDX #BUF1
LOOP2  LDA A 5,X
       CMPA #$FF
       BEQ FOUND2
       LDA B #11
LOOP1  INX
       DEC B
       BNE LOOP1
       CPX #BUF1+121
       BNE LOOP2
       BRA LOOP3
       SPC 1
*      SEND MESSAGE "NO ROOM"", THEN
*      REENTER EXBUG ---------------
       SPC 1
NTFND   LDX #MESSAG
       JSR PDATA
       JMP $F564
       SPC 1
*      COMPUTE REMAINING SIZE
*      WHERE OBJECT FILE IS TO STORE ------
       SPC 1
FOUND2 STX XTEMP
       LDAA #$4C
       LDAB 6,X
       STAB OTRK
       SBA
       STAA OSIZE
       LDAA 7,X
       STAA OSCTR
       LDX #$19
       CLRB
FND2   ADDA OSIZE
       ADCB #0
       DEX
       BNE FND2
       ADDA #$18
       ADCB #0
       SUBA OSCTR
       SBCB #0
       BNE FND3
       TSTA
       BEQ NTFND
       SPC 1
*      PREPARE STORAGE OF OBJECT FILE ON DISKETTE --
       SPC 1
FND3   STAB OSIZE
       STAA OSIZE+1
       STAB TISIZE
       STAA TISIZE+1
       SPC 1
*      GENERATE OBJECT FILE - THIS ROUTINE IS
*      SIMILAR TO THE EXBUG PUNCH
*      PROGRAM EXCEPT THAT DATA IS SENT
*      TO THE DISKETTE -----------------------
       SPC 1
FNCHE  JSR BEGEND
FNCH   LDX #MHDR
       JSR PDATA
       LDX #BUF
PH31   JSR INCHNP
       CMP A #$20
       BLT PH33
       CMP A #$61
       BLT PH35
PH33   LDA A #$20
PH35   STA A X
       INX
       CPX #BUF+6
       BNE PH31
       LDA B #$83
       LDX #MTAPE3
       JSR FDATA1
       LDX #BUF
PH41   JSR FUNT2
       CPX #BUF+6
       BNE PH41
       COM B
       PSH B
       TSX
       BSR FUNT2
       PUL B
       LDX BEGA
       STX TW
FUN11  LDA A ENDA+1
       SUB A TW+1
       LDA B ENDA
       SBC B TW
       BNE FUN22
       CMP A #24
       BCS FUN23
FUN22  LDA A #23
FUN23  ADD A #4
       STA A MCONT
       SUB A #3
       STA A TEMP
       LDX #MTAPE1
       BSR FDATA1
       CLR B
       LDX #MCONT
       BSR FUNT2
       LDX #TW
       BSR FUNT2
       BSR FUNT2
       LDX TW
FUN32  BSR FUNT2
       DEC TEMP
       BNE FUN32
       STX TW
       COM B
       PSH B
       TSX
       BSR FUNT2
       PUL B
       LDX TW
       DEX
       CPX ENDA
       BNE FUN11
       LDX #MTAPE2
       BSR FDATA1
       BRA UPDAT
       SPC 1
FUNT2  STX XTEMP3
       ADDB X
       PSH B
       LDA A X
       JSR CHEXL
       JSR WRT
       LDX XTEMP3
       LDA A X
       JSR CHEXR
       JSR WRT
       LDX XTEMP3
       INX
       PULB
FDATA9  RTS
       SPC 1
FDATA1 LDA A X
       CMP A #4
       BEQ FDATA9
       STX XTEMP3
       JSR WRT
       LDX XTEMP3
       INX
       BRA FDATA1
       SPC 1
*      UPDATE FILE DIRECTORY IN BUF1.
*      INCLUDE FILE NAME ----------
       SPC 1
FILL   CLRA
       JSR WRT
UPDAT  LDAB OCNTR
       BNE FILL
UPDAT2 LDA B TISIZE
       LDA A TISIZE+1
       SUBA OSIZE+1
       SBCB OSIZE
       ADDA #1
       ADCB #0
       LDX XTEMP
       STA B 8,X
       STA A 9,X
       CLR 5,X
       STS STEMP
       LDS #BUF-1
       LDA B #5
LOOP5  PUL A
       STA A X
       INX
       DEC B
       BNE LOOP5
       LDS STEMP
       LDX ISIZE
       DEX
       STX OSIZE
       LDAA OTRK
       PSHA
       CLR OTRK
       LDAA OSCTR
       PSHA
       LDA A ISCTR
       STA A OSCTR
       LDX XTEMP
       LDAB #11
LOOP7  INX
       DECB
       BNE LOOP7
       CPX #BUF1+121
       BNE UPDAT4
       BSR WRTBUF
       LDX #BUF1
UPDAT4 LDAA #$FF
       STAA 5,X
       PULA
       STAA 7,X
       PULA
       STAA 6,X
       BSR WRTBUF
       JMP $F564
       SPC 1
*      WRITE UPDATED DIRECTORY TO THE FILE
*      DIRECTORY AREA OF THE DISKETTE ----
       SPC 1
WRTBUF  LDX #BUF1
LOOP6  LDA A X
       STX XTEMP
       JSR WRT
       LDX XTEMP
       INX 
       CPX #BUF1+128
       BNE LOOP6
       RTS
       SPC 1
       OPT NOGENERATE
MESSAG  FCC /NO ROOM/
       FCB $0D,$0A,$20,$20,4
       SPC 1
TEXT1   FCC /MEMORY DUMP ON DISKETTE/
       FCB $0D,$0A,4
MHDR   FCC /HDR=X /
       FCB 4
MTAPE1 FCB $D,$A,0,'S,'1,4
MTAPE2  FCB $0D,$0A,0
       FCC /S9030000FC/
       FCB $D,4
MTAPE3 FCB $D,$A,$0
       FCC /S00B00005820/
       FCB 4
       SPC 1
STACK  EQU *+30
       SPC 2
       END
