0800-                  4               .OR     $800
0800-                  5       ***********************************************************
0800-                  6       *                                                         *
0800-                  7       * DUMP:THIS PROGRAM WILL ALLOW ITS USER TO DUMP AN ENTIRE *
0800-                  8       *      TRACK IN ITS RAW FORM INTO MEMORY FOR EXAMINATION. *
0800-                  9       *                                                         *
0800-                 10       * INPUT: $02 = TRACK TO BE READ                           *
0800-                 11       *                                                         *
0800-                 12       * OUTPUT:$1000 = ADDRESS OF TRACK IMAGE                   *
0800-                 13       *                                                         *
0800-                 14       * ENTRY POINT: $800                                       *
0800-                 15       *                                                         *
0800-                 16       * PROGRAMMER: DON D WORTH 2/19/81                         *
0800-                 17       *                                                         *
0800-                 18       ***********************************************************
0800-                 19
0800-                 20       *       ZPAGE DEFINITIONS
0800-                 21
0000-                 22       PTR .EQ $0 WORK POINTER
0002-                 23       TRACK .EQ $2 TRACK TO BE READ/WRITTEN
003C-                 24       A1L .EQ $3C MONITOR POINTER
003E-                 25       A2L .EQ $3E MONITOR POINTER
0048-                 26       PREG .EQ $48 MONITOR STATUS REGISTER
0800-                 27
0800-                 28       *       OTHER ADDRESSES
0800-                 29
1000-                 30       BUFFER .EQ $1000 TRACK IMAGE AREA
03E3-                 31       LOCRPL .EQ $3E3 LOCATE RWTS PARMLIST SUBRTN
03D9-                 32       RWTS .EQ $3D9 RWTS SUBROUTINE
FDED-                 33       COUT .EQ $FDED PRINT ONE CHAR SUBROUTINE
FDB3-                 34       XAM .EQ $FDB3 MONITOR HEX DUMP SUBRTN
0800-                 35
0800-                 36       *       DISK I/O SELECTS
0800-                 37
C080-                 38       DRVSM0 .EQ $C080 STEP MOTOR POSITIONS
C081-                 39       DRVSM1 .EQ $C081
C082-                 40       DRVSM2 .EQ $C082
C083-                 41       DRVSM3 .EQ $C083
C084-                 42       DRVSM4 .EQ $C084
C085-                 43       DRVSM5 .EQ $C085
C086-                 44       DRVSM6 .EQ $C086
C087-                 45       DRVSM7 .EQ $C087
C088-                 46       DRVOFF .EQ $C088 TURN DRIVE OFF AFTER 6 REVS
C089-                 47       DRVON .EQ $C089 TURN DRIVE ON
C08A-                 48       DRVSL1 .EQ $C08A SELECT DRIVE 1
C08B-                 49       DRVSL2 .EQ $C08B SELECT DRIVE 2
C08C-                 50       DRVRD .EQ $C08C READ DATA LATCH
C08D-                 51       DRVWR .EQ $C08D WRITE DATA LATCH
C08E-                 52       DRVRDM .EQ $C08E SET READ MODE
C08F-                 53       DRVWRM .EQ $C08F SET WRITE MODE
0800-                 54
0800-                 55       *       RWTS PARMLIST DEFINITION
0800-                 56
0800-00               57       RPLIOB .DA #0 IOB TYPE ($01)
0801-00               58       RPLSLT .DA #0 SLOT*16
0802-00               59       RPLDRV .DA #0 DRIVE
0803-00               60       RPLVOL .DA #0 VOLUME
0804-00               61       RPLTRK .DA #0 TRACK
0805-00               62       RPLSEC .DA #0 SECTOR
0806-00               63       RPLDCT .DA #0000 ADDRESS OF DCT
0807-00               64       RPLBUF .DA #0000 ADDRESS OF BUFFER
0808-00               65       RPLSIZ .DA #0000 SECTOR SIZE
0809-00               66       RPLCMD .DA #0 COMMAND CODE
0000-                 67       RPLCNL .EQ $00    NULL COMMAND
0001-                 68       RPLCRD .EQ $01    READ COMMAND
0002-                 69       RPLCWR .EQ $02    WRITE COMMAND
0004-                 70       RPLCFM .EQ $04    FORMAT COMMAND
080A-00               71       RPLRCD .DA #0 RETURN CODE
0010-                 72       RPLRWP .EQ $10    WRITE PROTECTED
0020-                 73       RPLRVM .EQ $20    VOLUME MISMATCH
0040-                 74       RPLRDE .EQ $40    DRIVE ERROR
0080-                 75       RPLRRE .EQ $80    READ ERROR
080B-00               76       RPLTVL .DA #0 TRUE VOLUME
080C-00               77       RPLPSL .DA #0 PREVIOUS SLOT
080D-00               78       RPLPDR .DA #0 PREVIOUS DRIVE
080E-                 79
080E-                 80       *       USE RWTS TO POSITION THE ARM TO THE DESIRED TRACK
080E-                 81
080E-20 E3 03         82 (  6) DUMP JSR LOCRPL LOCATE RWTS PARMLIST
0811-84 00            83 (  3)  STY PTR AND SAVE POINTER
0813-85 01            84 (  2)  STA PTR+1
0815-                 85
0815-A5 02            86 (  3)  LDA TRACK GET TRACK TO READ/WRITE
0817-A0 04            87 (  2)  LDY #RPLTRK STORE IN RWTS LIST
0819-91 00            88 (  6)  STA (PTR),Y
081B-                 89
081B-A9 00            90 (  2)  LDA #RPLCNL NULL OPERATION
081D-A0 09            91 (  2)  LDY #RPLCMD AND STORE IN LIST
081F-91 00            92 (  6)  STA (PTR),Y
0821-                 93
0821-A9 00            94 (  2)  LDA #0 ANY VOLUME WILL DO
0823-A0 03            95 (  2)  LDY #RPLVOL
0825-91 00            96 (  6)  STA (PTR),Y
0827-20 E3 03         97 (  6)  JSR LOCRPL RELOAD POINTER TO PARMS
082A-20 D9 03         98 (  6)  JSR RWTS CALL RWTS
082D-A9 00            99 (  2)  LDA #0
082F-85 48           100 (  2)  STA PREG FIX P REG SO DOS IS HAPPY
0831-                101
0831-                102       *       PREPARE TO DUMP TRACK TO MEMORY
0831-                103
0831-A0 01           104 (  2)  LDY #RPLSLT GET SLOT*16
0833-B1 00           105 ( 5*)  LDA (PTR),Y
0835-AA              106 (  2)  TAX
0836-BD 89 C0        107 ( 4*)  LDA DRVON,X KEEP DRIVE ON
0839-BD 8E C0        108 ( 4*)  LDA DRVRDM,X INSURE READ MODE
083C-                109
083C-A9 10           110 (  2)  LDA #BUFFER/$100 POINT AT DATA
083E-85 00           111 (  2)  STA PTR
0840-A9 00           112 (  2)  LDA #BUFFER
0842-85 01           113 (  2)  STA PTR+1
0844-A0 00           114 (  2)  LDY #0
0846-                115
0846-                116       *       START DUMPING AT THE BEGINNING OF A SECTOR ADDRESS
0846-                117       *       FIELD OR A SECTOR DATA FIELD
0846-                118
0846-BD 8C C0        119 ( 4*) LOOP1 LDA DRVRD,X WAIT FOR NEXT BYTE
0849-10 FB           120 (2**)  BPL LOOP1
084B-C9 FF           121 (  2)  CMP #$FF AUTOSYNC?
084D-D0 F7           122 (2**)  BNE LOOP1 NO, DON'T START IN MIDDLE
084F-BD 8C C0        123 ( 4*) LOOP2 LDA DRVRD,X WAIT FOR NEXT BYTE
0852-10 FB           124 (2**)  BPL LOOP2
0854-C9 FF           125 (  2)  CMP #$FF TWO AUTOSYNCS?
0856-D0 EE           126 (2**)  BNE LOOP1 NOT YET
0858-BD 8C C0        127 ( 4*) LOOP3 LDA DRVRD,X
085B-10 FB           128 (2**)  BPL LOOP3
085D-C9 FF           129 (  2)  CMP #$FF STILL AUTOSYNCS?
085F-F0 F7           130 (2**)  BEQ LOOP3 YES, WAIT FOR DATA BYTE
0861-D0 05           131 (2**)  BNE LOOP4 ELSE, START STORING DATA
0863-                132
0863-                133       *       ONCE ALIGNED, BEGIN COPYING THE TRACK TO MEMORY.
0863-                134       *       COPY AT LEAST TWICE ITS LENGTH TO INSURE WE GET IT
0863-                135       *       ALL.
0863-                136
0863-BD 8C C0        137 ( 4*) LOOPD LDA DRVRD,X WAIT FOR NEXT DATA BYTE
0866-10 FB           138 (2**)  BPL LOOPD
0868-91 00           139 (  6) LOOP4 STA (PTR),Y STORE IN MEMORY
086A-E6 00           140 (  5)  INC PTR BUMP POINTER
086C-D0 F5           141 (2**)  BNE LOOPD
086E-E6 01           142 (  5)  INC PTR+1
0870-A5 01           143 (  3)  LDA PTR+1
0872-C9 40           144 (  2)  CMP #$40 DONE AT LEAST A TRACK?
0874-90 ED           145 (2**)  BCC LOOPD NO, CONTINUE
0876-BD 88 C0        146 ( 4*)  LDA DRVOFF,X TURN DRIVE OFF
0879-                147
0879-                148       *       WHEN FINISHED, DUMP SOME OF TRACK IN HEX ON SCREEN
0879-                149
0879-A9 10           150 (  2) EXIT LDA #BUFFER/$100 DUMP 800.8AF
087B-85 3C           151 (  2)  STA A1L
087D-A9 00           152 (  2)  LDA #BUFFER
087F-85 3D           153 (  2)  STA A1L+1
0881-A9 BF           154 (  2)  LDA #BUFFER/$100+$AF
0883-85 3E           155 (  2)  STA A2L
0885-A9 AF           156 (  2)  LDA #BUFFER+$AF
0887-85 3F           157 (  2)  STA A2L+1
0889-4C B3 FD        158 (  3)  JMP XAM EXIT VIA HEX DISPLAY
