[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Disk II Head movement



On Jan 8, 4:20 pm, Vladimir Ivanov <vlad...@XXXyahooXXX.com> wrote:
> On Sun, 8 Jan 2012, Kevin Dady wrote:
> > Is there a program (to download or to type in) that I could move the
> > apple disk head to a track
>
> Any track/sector editor. Give Locksmith 6.0 a try.
>
> Alternatively, a short program that sets IOB and calls RWTS ($3D9) would
> do. There's an example at the end of the message.
>
> > and also report back what track the head is currently on?
>
> It's the software solely that keeps track of the current track.
>
>    -- Vlad
>
> Example: Read through disk (backwards). Call to WAIT was for testing
> purposes, you can safely ignore it. It halts with BRK either upon normal
> completion or I/O error.
>
> ca65 V2.12.0 - (C) Copyright 1998-2005 Ullrich von Bassewitz
> Main file   : test.s
> Current file: test.s
>
> 000000r 1               ; HDDD test code
> 000000r 1
> 000000r 1               ; -----------------------------------------------------------------------------
> 000000r 1
> 000000r 1               IOBTYPE =       0
> 000000r 1               IOBSLOT =       1
> 000000r 1               IOBDRV  =       2
> 000000r 1               IOBVOL  =       3
> 000000r 1               IOBTRK  =       4
> 000000r 1               IOBSEC  =       5
> 000000r 1               IOBDCT  =       6
> 000000r 1               IOBBUF  =       8
> 000000r 1               IOBLEN  =       10
> 000000r 1               IOBCMD  =       12
> 000000r 1               IOBSTAT =       13
> 000000r 1               IOBSMOD =       14
> 000000r 1
> 000000r 1               ; buffer at $1000
> 000000r 1
> 000000r 1               BUF     =       $1000
> 000000r 1
> 000000r 1               ; ROM entries
> 000000r 1
> 000000r 1               WAIT    =       $FCA8
> 000000r 1               COUT    =       $FDED
> 000000r 1
> 000000r 1               ; -----------------------------------------------------------------------------
> 000000r 1
> 000000r 1                       .org    $0300
> 000300  1
> 000300  1               ; init
> 000300  1  A9 01                lda     #1                              ; read
> 000302  1  8D 49 03             sta     iob + IOBCMD
> 000305  1
> 000305  1  A9 23                lda     #35
> 000307  1  8D 41 03             sta     iob + IOBTRK
> 00030A  1  A9 00                lda     #0
> 00030C  1  8D 42 03             sta     iob + IOBSEC
> 00030F  1
> 00030F  1               ; loop over all sectors/tracks backwards
> 00030F  1
> 00030F  1  CE 42 03     loop:   dec     iob + IOBSEC
> 000312  1  10 11                bpl     secok
> 000314  1
> 000314  1  A9 8D                lda     #$0D + $80
> 000316  1  20 ED FD             jsr     COUT
> 000319  1
> 000319  1  A9 0F                lda     #15
> 00031B  1  8D 42 03             sta     iob + IOBSEC
> 00031E  1
> 00031E  1  CE 41 03             dec     iob + IOBTRK
> 000321  1  10 02                bpl     secok
> 000323  1  00                   brk                                     ; --- EXIT
> 000324  1  00                   brk
> 000325  1               secok:
> 000325  1
> 000325  1  A9 AE                lda     #'.' + $80
> 000327  1  20 ED FD             jsr     COUT
> 00032A  1
> 00032A  1  A9 03                lda     #>iob                           ; call RWTS
> 00032C  1  A0 3D                ldy     #<iob
> 00032E  1  20 D9 03             jsr     $3D9
> 000331  1  90 02                bcc     rwok
> 000333  1  00                   brk                                     ; --- I/O ERROR
> 000334  1  00                   brk
> 000335  1               rwok:
> 000335  1
> 000335  1  A9 1E                lda     #$1E
> 000337  1  20 A8 FC             jsr     WAIT
> 00033A  1  4C 0F 03             jmp     loop
> 00033D  1
> 00033D  1               ; -----------------------------------------------------------------------------
> 00033D  1
> 00033D  1  01           iob:    .byte   $01                             ; type
> 00033E  1  60                   .byte   $60                             ; slot * $10
> 00033F  1  01                   .byte   $01                             ; drive (1 / 2)
> 000340  1  00                   .byte   $00                             ; expected volume (0= any)
> 000341  1  00                   .byte   $00                             ; track
> 000342  1  00                   .byte   $00                             ; sector
> 000343  1  50 03                .word   dct                             ; -> DCT
> 000345  1  00 10                .word   BUF                             ; -> buffer
> 000347  1  00 01                .word   $0100                           ; one sector
> 000349  1  00                   .byte   $00                             ; 1- read, 2- write, 4- format
> 00034A  1  00                   .byte   $00                             ; status
> 00034B  1  00                   .byte   $00                             ; status modifier (actual volume)
> 00034C  1  60                   .byte   $60                             ; previous slot * $10
> 00034D  1  01                   .byte   $01                             ; previous drive
> 00034E  1  00 00                .byte   $00, $00                        ; -- spares
> 000350  1
> 000350  1  00 01 EF D8  dct:    .byte   $00, $01, $EF, $D8              ; Disk II
> 000354  1
> 000354  1                       .end

cool, thanks a bunch