[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