Aktualności: C64 Power - online od stycznia 2000 !

Autor Wątek: d64-to-1541  (Przeczytany 1985 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline jad

  • Level 3
  • ***
  • Wiadomości: 119
d64-to-1541
« dnia: 11 Października 2016, 11:19 »
Kolega pLayer_sct  zgłosił mi problem z nagrywaniem obrazów d64 na dyskietkę za pomocą (mojego) programu d64-to-1541. Dema zgrane tym softem wysypują się w losowych momentach.
Użyłem tam procedur zapisu na dyskietkę, które wyrypałem z fast hack'em. Okazuje się, że jest z nimi coś nie teges, bo np. działające demka, po zrobieniu kopii dyskietki fast hack'emem, owe kopie też działają inaczej.

Chętnie rozwiązałbym ten problem, bo zdarza mi się czasem użyć własnego softu i chcę żeby działał dobrze.
Widzę 2 możliwości:
1. Nakłonić procedury fast hack'em do prawidłowego działania
2. Użyć innych szybkich procedur zapisu sektorów

Nie mam niestety żadnego ekspirjensu w kodowaniu stacji 1541. Może ktoś by mi pomógł?



Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Re: d64-to-1541
« Odpowiedź #1 dnia: 11 Października 2016, 11:39 »
Prosty temat przy okazji wkleję Ci prockę do szybkiego posyłania bloku do stacji i jego zapisu.
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
Re: d64-to-1541
« Odpowiedź #2 dnia: 11 Października 2016, 12:07 »
no zaczęło się od tego, że w sdbrowse mu nie działało - no to napisałem żeby sprawdził na Twoim tool-sie, bo w jest zaszyty sdbrowse :)

Ale okazało się że w obecnej wersji sdbrowse (nad którą pracuję i którą mu wysłałem), ze zmodyfikowaną Twoją procką zadziałało. Chcesz źródło ?

@Wegi, pLayer_sct zaproponował od razu żeby dorobić także exteded tracks, potrzeba jakiś specjalnych sztuczek, czy ustawić na 35 ścieżkę i przesuwać głowicę co dwa kroki ?
« Ostatnia zmiana: 11 Października 2016, 12:11 wysłana przez Skull »

Offline jad

  • Level 3
  • ***
  • Wiadomości: 119
Re: d64-to-1541
« Odpowiedź #3 dnia: 11 Października 2016, 12:12 »
Prosty temat przy okazji wkleję Ci prockę do szybkiego posyłania bloku do stacji i jego zapisu.

Wegi, dzięki. Przydałaby się też procka formatująca ścieżkę.

Offline jad

  • Level 3
  • ***
  • Wiadomości: 119
Re: d64-to-1541
« Odpowiedź #4 dnia: 11 Października 2016, 12:13 »
Ale okazało się że w obecnej wersji sdbrowse (nad którą pracuję i którą mu wysłałem), ze zmodyfikowaną Twoją procką zadziałało. Chcesz źródło ?

Poproszę źródło.

Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Re: d64-to-1541
« Odpowiedź #5 dnia: 11 Października 2016, 12:51 »
@Wegi, pLayer_sct zaproponował od razu żeby dorobić także exteded tracks, potrzeba jakiś specjalnych sztuczek, czy ustawić na 35 ścieżkę i przesuwać głowicę co dwa kroki ?

http://csdb.dk/release/?id=81316
Takie rzeczy robi krótki program run&restore nagrywany z illegal dir

jak pamiętam...

;drivecode
*=$0400

Lda #36 ;track
sta $06
lda#$00 ;sector... ble ble i tak go nie ma na 36 sciezce
sta $07

lda #$80
sta $00
lda $00
bmi *-2
rts
I już głowica jest nad trackiem 36


@jad Sources między innymi formaterów tutaj
http://csdb.dk/release/?id=85881
« Ostatnia zmiana: 11 Października 2016, 13:09 wysłana przez Raf »
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???

Offline Skull

  • Level 6
  • ******
  • Wiadomości: 2034
Re: d64-to-1541
« Odpowiedź #6 dnia: 11 Października 2016, 13:23 »
procka przesuwu głowicy wygląda tak (w Y docelowy track):

                        tya
sec
sbc $22 ;current track for drive
beq ++ ;if current = target then skip the head movement
ldx #1 ;step by +1 (if current track < target track)
bcs +
;if current > target
;prepare the movement outwards to outside of the disk (to track 1)
ldx #$ff ;step by -1
eor #$ff ;change sign of the result
adc #1 ;take a absolute value of difference between tracks
+
asl ;multiply by 2, cause the step motor is 0.5 track
stx fr_temp_1 ;remember move direction
tax ;save steps counter
  - clc
lda $1c00 ;motor control register
adc fr_temp_1
and #3
sta fr_temp_2
lda $1c00
and #$fc
ora fr_temp_2 ;next move direction
sta $1c00
lda #$94 ;[$94] set timer for next interation
sta $1805

- bit $1805
bmi - ;wait (about $14ff ticks)
dex ;next step
bne --
+
sty $22 ;on the target track


Offline pLayer_sct

  • Level 1
  • *
  • Wiadomości: 39
Re: d64-to-1541
« Odpowiedź #7 dnia: 11 Października 2016, 20:09 »
No sie zaczęło :) Czego to się nie robi żeby wygodnie oglądać demka :) Na ale wszystko dla szczytnej ideii aby nie używać pc z xu1541 tylko wszystko robic z poziomu komcia :)

Skull przy okazji takie pytanie, jest jakaś opcja aby zmniejszyć ilość wyświetlanych kolumn w tym nowym sdbrowse? Bo mi chyba ok 1 albo dwie kolumny wychodzi poza ekran
pLayer / Suspect
--------------------------------------------------
C64C /internal SD2IEC, SwinSID, JiffyDos/+1541II+FINAL III+XU1541
A1200 + Blizzard030/50 + Lotharek HXC

Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Re: d64-to-1541
« Odpowiedź #8 dnia: 11 Października 2016, 20:10 »

!to "procka.prg" , CBM
         *= $0801


;-----------
VECTR1 = $FB
VECTR2 = $FD
;-----------
;-----------
;BASICLINE
         !byte $0b,$08,$90,$06,$9e,$32
         !byte $30,$34,$39,$00,$a0,$00

JMP STARTMW

;--------



;--------
SENDDRIV
         PHA
         LSR A
         LSR A
         LSR A
         LSR A
         TAX

         BIT $DD00
         BVC *-3

         SEC
-
         LDA $D012
         SBC #$32
         BCC  +
         AND #$07
         BEQ -
+
         LDA #$03

         NOP
         NOP

         LDA #$03
         STA $DD00
         LDA TABKON,X
         STA $DD00
         LSR A
         LSR A
         AND #$F7
         STA $DD00
         PLA
         AND #$0F
         TAX
         LDA TABKON,X
         STA $DD00
         LSR A
         LSR A
         AND #$F7
         STA $DD00
         LDA #$23
         NOP
         NOP
         NOP

         STA $DD00
         RTS;-
TABKON   !BYTE $07,$87,$27,$A7,$47,$C7
         !BYTE $67,$E7
         !BYTE $17,$97,$37,$B7,$57,$D7
         !BYTE $77,$F7
;-
;--------
STARTMW
;---
          JSR SEND_PRG
          BCC +
          rts ; error - dev not present or so
+         SEI

          LDA #1 ;TRACK
          JSR SENDDRIV

          LDA #0 ;SECTOR
          JSR SENDDRIV

          LDY #$00
-         LDA $0400,Y
          JSR SENDDRIV
          INY
          BNE -

          LDA #0
          JSR SENDDRIV ; DISCONNECT

          CLI
          CLC
          RTS
;----------------------
SEND_PRG
         LDA #$37
         STA $01
         LDA #<DRIVECODE
         STA MEW3+1
         LDA #0
         STA MWRT
         LDA #>DRIVECODE
         STA MEW3+2
;---

         LDX #4

MEW      JSR LISTEN
         BCC MEWCNT
         RTS
MEWCNT
         LDY #$05
MEW2     LDA TXMW,Y
         JSR $FFA8
         DEY
         BPL MEW2

         LDY #$20
MEW3     LDA 1000
         JSR $FFA8
         INC MWRT
         INC MEW3+1
         BNE MEW4
         INC MEW3+2
MEW4
         DEY
         BNE MEW3
         JSR $FFAE
         DEX
         BNE MEW

;-
         JSR LISTEN

         LDY #$04

MEX1     LDA MEX,Y
         JSR $FFA8
         DEY
         BPL MEX1
         JSR $FFAE
         SEI
         LDA #$23
         STA $DD00
         BIT $DD00
         BVS *-3
         ;LDA #$35
         ;STA $01

          CLC
          RTS
         ;JMP DALEJ
;-

LISTEN
         LDA #$00
         STA $90
         LDA $BA
         JSR $FFB1
         LDA #$6F
         JSR $FF93
         LDA $90
         BMI NODRIVE
         CLC
         RTS
NODRIVE  SEC
         RTS
;-
TXMW
         !BYTE $20
         !BYTE 4
MWRT     !BYTE 0
         !TEXT "W-M"
;-
MEX
         !BYTE 4
         !BYTE 0
         !TEXT "E-M"
;--------
;---     START DRIVE CODE
;--------
DRIVECODE
;--------
!PSEUDOPC $0400
STARTER
         JSR $C100
         SEI
         LDA #$18
         STA $1C07
         LDA #$7A
         STA $1802
         JSR SETLINE
         JSR $F5E9

GTPRG
          SEI
          JSR READONE
          BNE +
          CLI
          RTS
+         STA $06 ;TRACK
          JSR READONE
          STA $07 ;SECTOR
          JSR READBLOK

          LDX #0
          LDA #$90
          STA $0298
          JSR $D57D
          LDA #5
          STA $6A
          CLI
          JSR $D599
          CMP #$02
          BCC GTPRG
          STX $1800
          JMP $E60A ;ERROR
;---
READONE
         LDY #$FF
         !BYTE $2C
;-
READBLOK LDY #$00
;-
READBT
         LDA #$00
         STA $1800
WTR1     LDA $1800
         BNE *-3
         PHP
         LDA $1800
         ASL A
         PLP
         EOR $1800
         ASL A
         ASL A
         ASL A
         NOP
         NOP
         NOP
         EOR $1800
         ASL A
         NOP
         NOP
         NOP
         EOR $1800
ADDR     = *+2
         STA $0300,Y
         STA LASTGET
       ; NOP
         INY
         BNE WTR1
SETLINE
         LDA #$08
         STA $1800
LASTGET  = *+1
         LDA #$00
         RTS
;--------
!REALPC


Procka zapisuje podane 256 bajtów pod wskazany track i sector. I zapętla się w oczekiwaniu na kolejny track i sector, chyba, że zostanie posłane #$00 jako track


Można to przyspieszyć, gdybyś posyłał bloki z przeplotem 8-10
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???

Offline jad

  • Level 3
  • ***
  • Wiadomości: 119
Re: d64-to-1541
« Odpowiedź #9 dnia: 12 Października 2016, 08:28 »
Można to przyspieszyć, gdybyś posyłał bloki z przeplotem 8-10

Wegi, prośba. Gdybyś mógł podać przepis na przeplot, tzn. nr ścieżki - wartość przeplotu.
Sorry, na prawdę nie znam się na stacji ...

Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Re: d64-to-1541
« Odpowiedź #10 dnia: 12 Października 2016, 11:50 »


for i := 1 to 35 do
begin
  if i < 18 then tb_manysec[i] := 21;
  if ((i>17)and(i<25)) then tb_manysec[i] := 19;
  if ((i>24)and(i<31)) then tb_manysec[i] := 18;
  if i > 30 then tb_manysec[i] := 17;
end;

for i := 1 to 17 do
begin

  maxsec := tb_manysec[i];
  cntrsec := maxsec;

  for i4 := 0 to maxsec do _bufenq[i4] := 255;
  for i4 := 0 to maxsec do _tabsec[i4] := 255;
  acc := maxsec; //maxsec
  xreg := 0;
  cntr1 :=  xreg;
  cntr2 :=  xreg;



    xreg := cntr1;
    acc := cntr2;



asm
pushad
xor eax,eax // lda #0
xor ebx,ebx //tax

xor ecx,ecx //tay

@scloop:
mov bl, byte ptr [cntr1]        //ldx cntr1
mov al, byte ptr [cntr2]        //lda cntr2
mov byte ptr [_bufenq] + [ebx],al //sta bufenq,x
mov cl,al                       //tay
mov al,bl                       //txa
mov byte ptr [_tabsec] + [ebx],al //sta tabsec,x
inc byte ptr [cntr2]            //inc cntr2
dec byte ptr [cntrsec]          //dec cntrsec
je @scl4                        //beq scl4
mov al, byte ptr[cntr1]         //lda cntr1
clc                             //clc
adc al,byte ptr [interleave]    //adc #interleave
cmp al, byte ptr[maxsec]        //cmp maxsec
jc @scl2b                      //bcc scl2b
sbb al, byte ptr [maxsec]       //sbc maxsec
@scl2b:
mov bl,al                       //tax

@scl2:
mov byte ptr[cntr1],bl          //stx cntr1
mov al,byte ptr[_bufenq]+[ebx]  //lda bufenq,x
cmp al , 255
je @scloop                      //bmi scloop
inc bl                          //inx
cmp bl, byte ptr [maxsec]       //cpx maxsec
jc @scl2                       //bcc scl2
mov bl, 0                      //ldx #0
je @scl2                       //beq scl2


@scl4:
popad
end; //end asm

for i4 := 0 to maxsec-1 do
begin
  _tabsec[_bufenq[i4]] :=i4;
end;

for i4 := 0 to maxsec-1 do
begin
  tbsec[i3] :=_tabsec[i4];
  inc(i3);
end;
end;

for i := 19 to 35 do
begin

  maxsec := tb_manysec[i];
  cntrsec := maxsec;

  for i4 := 0 to maxsec do _bufenq[i4] := 255;
  for i4 := 0 to maxsec do _tabsec[i4] := 255;
  acc := maxsec; //maxsec
  xreg := 0;
  cntr1 :=  xreg;
  cntr2 :=  xreg;



    xreg := cntr1;
    acc := cntr2;



asm
pushad
xor eax,eax
xor ebx,ebx

xor ecx,ecx

@scloop:
mov bl, byte ptr [cntr1]        //ldx cntr1
mov al, byte ptr [cntr2]        //lda cntr2
mov byte ptr [_bufenq] + [ebx],al //sta bufenq,x
mov cl,al                       //tay
mov al,bl                       //txa
mov byte ptr [_tabsec] + [ebx],al //sta tabsec,x
inc byte ptr [cntr2]            //inc cntr2
dec byte ptr [cntrsec]          //dec cntrsec
je @scl4                        //beq scl4
mov al, byte ptr[cntr1]         //lda cntr1
clc                             //clc
adc al,byte ptr [interleave]    //adc #interleave
cmp al, byte ptr[maxsec]        //cmp maxsec
jc @scl2b                      //bcc scl2b
sbb al, byte ptr [maxsec]       //sbc maxsec
@scl2b:
mov bl,al                       //tax
@scl2:
mov byte ptr[cntr1],bl          //stx cntr1
mov al,byte ptr[_bufenq]+[ebx]  //lda bufenq,x
cmp al , 255
je @scloop                      //bmi scloop
inc bl                          //inx
cmp bl, byte ptr [maxsec]       //cpx maxsec
jc @scl2                       //bcc scl2
mov bl, 0                      //ldx #0
je @scl2                       //beq scl2

@scl4:
popad
end; //end asm

end;


Jak byś korzystał z tego to program musi być zmieniony tak, żeby na ścieżkę obowiązującą uruchamiany był kodem $e0 i wtedy zapisywana byłaby cała ścieżka... bez rozkazu #$90...
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???

Offline KB777

  • Level 6
  • ******
  • Wiadomości: 2430
  • -profil nieaktywny-
Re: d64-to-1541
« Odpowiedź #11 dnia: 12 Października 2016, 19:21 »

Wegi, na X86 też w asm rzeźbisz ? No, respekt :)
-profil nieaktywny-

Offline pLayer_sct

  • Level 1
  • *
  • Wiadomości: 39
Re: d64-to-1541
« Odpowiedź #12 dnia: 12 Października 2016, 20:35 »
Aha przy okazji extended tracks. Formatowanie z tego co zauważyłem programy robią na 40 ścieżek. Aczkolwiek już przy zapisie jest różnie. Najlepiej pokazuje to demo http://csdb.dk/release/?id=11586 gdzie pierwsza strona dyskietki zapisywana jest na 37 ścieżek, a druga na 38 ścieżek. Tak więc przy zapisie takich dyskietek chyba powinien wyskoczyć jakiś requester z pytaniem o zapis ostatniej ścieżki.

Przynajmniej z poziomu xu1541 i opencbm tak się robi przy komendzie kopiowania:

d64copy.exe plik.d64 8 -exx - gdzie parametr e określa która jako ostatnia ścieżka ma być zapisana.
pLayer / Suspect
--------------------------------------------------
C64C /internal SD2IEC, SwinSID, JiffyDos/+1541II+FINAL III+XU1541
A1200 + Blizzard030/50 + Lotharek HXC

Offline pLayer_sct

  • Level 1
  • *
  • Wiadomości: 39
Re: d64-to-1541
« Odpowiedź #13 dnia: 12 Października 2016, 21:40 »
Jeszcze jedno - dalej testuje demka i niestety Skull nowy SDBrowse wysypał sie na http://csdb.dk/release/?id=149153. Standardowo CBMCommand 2.3 bez problemu zapisał i demko poszło bez niespodzianek
pLayer / Suspect
--------------------------------------------------
C64C /internal SD2IEC, SwinSID, JiffyDos/+1541II+FINAL III+XU1541
A1200 + Blizzard030/50 + Lotharek HXC

Offline wegi

  • Level 7
  • *******
  • Wiadomości: 2588
Re: d64-to-1541
« Odpowiedź #14 dnia: 12 Października 2016, 21:57 »
przynajmniej skull ma betatestera konkretnego :)

to tylko wstawka asm w delphi @kb777


proponuję przetestować illegal dir :)
Gdy po wynalezieniu komputera kwantowego jedni pytali o sposób wytwarzania prądu, kisiel pytał jak wytwarzać świeczki...

NIECH NIE BĘDZIE NICZEGO !!!

CZY RAF PIŁ Z JERICHA KUBECZKA ???