home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta2.arc / SPARTA22.DOC < prev    next >
Text File  |  1988-09-01  |  18KB  |  1 lines

  1.       Procedura czyta konfiguracj❎ stacji dyskw,  ⇧czy si❎ ona z¢  procedur⇧ ustalaj⇧c⇧ ustawienia pocz⇧tkowe uəytkownika.¢¢           org $A36C ReaD drive CONFIGuration.¢¢  dcmnd    equ $302¢  dstats   equ $303¢  dbyt     equ $308¢¢  btspsec  equ $7A0¢  tsecnum  equ $7A2¢  dskid    equ $7A8¢  prcmflg  equ $7AB¢  flpflg   equ $7AC¢  secptrkl equ $7B5¢  secptrkh equ $7B7¢  frskew   equ $7BA¢  frden    equ $7BB¢  frtrack  equ $7BD¢  lbuff    equ $A97¢¢  stddnr   equ $A42D¢  getdst   equ $A43A¢  sdajlsio equ $A953¢¢  rdconfig lda #$00        Na pocz⇧tku procedura kasuje flag❎ rozpoznawania¢           sta prcmflg     przez stacj❎ rozkazw PERCOM.¢¢           jsr getdst      Teraz procedura pobiera status nap❎du i¢           bpl eA379       sprawdza wynik.¢¢           jmp stddnr      Gdy stacja nie odpowiada komunikowany jest b ⇧d.¢¢  eA379    lda #'N'        Teraz procedura prbuje odczyta⇨ PERCOM ze stacji,¢           sta dcmnd       ustawia wi❎c pola DCB,¢           lda #$40        kodu, statusu,¢           sta dstats¢  eA383    lda #$0C¢           sta dbyt        d ugo③ci danych i¢           lda #$00¢           sta dbyt+1¢           jsr sdajlsio    wywo uje funkcj❎.¢           bmi eA3DF   Gdy b ⇧d.¢¢           dec prcmflg     Gdy operacja si❎ powiod a ustawiana jest flaga¢                           PERCOM i¢           ldx lbuff+7¢           stx btspsec     odpowiednie zmienne procedury jak¢           ldx lbuff+2     liczba bajtw w sektorze,¢           stx secptrkh¢           ldx lbuff+3¢           stx secptrkl¢           lda lbuff¢           sta dskid       identyfikator dysku,¢           and #$7F¢           tax             Nast❎pnie kasowana jest ca kowita liczba¢           lda #$00        sektorw¢           sta tsecnum¢           sta tsecnum+1¢¢  eA3B8    clc             aby uzyska⇨ proawid owy wynik poprzez¢           lda secptrkl    przemnoəenie liczby sektorw na ③cieəce przez¢           adc tsecnum     liczb❎ ③cieəek.¢           sta tsecnum¢           lda secptrkh¢           adc tsecnum+1¢           sta tsecnum+1¢           dex¢           bne eA3B8¢¢           lda lbuff+4     Teraz procedura przemnaəa dwukrotnie wynik¢           beq eA3D9¢           asl tsecnum     gdy stacja jest dwustronna.¢           rol tsecnum+1¢¢  eA3D9    ldx dskid       Nast❎pnie procedura sprawdza czy chodzi o ramdysk¢           dex             lub hard dysk.¢           beq eA40F¢¢  eA3DF    bit flpflg      Teraz procedura sprawdza czy chodzi o normaln⇧¢           bmi sddata      stacj❎ dyskw.¢¢  eA3E4    dec flpflg      A gdy tak nie jest oznacza to wykasowanie¢           lda #$00        wszelkich ustawie urzytkownika.¢           sta frskew¢           sta frtrack¢           sta frden¢           inc frskew¢¢           org $A3F5 Set Disk DATA.¢¢  btspsec  equ $7A0¢  prcmflg  equ $7AB¢  flpflg   equ $7AC¢  frskew   equ $7BA¢  frden    equ $7BB¢  frmode   equ $7BC¢  frtrack  equ $7BD¢¢  rfsec    equ $A475¢¢  sddata   bit prcmflg     Teraz procedura sprawdza czy zosta  odczytany¢           bmi eA40C       PERCOM.¢¢           lda #$02        Gdy tak nie by o oznacza to stacj❎ standardow⇧, a¢           sta frskew      wi❎c przeplot ustala si❎ na zwyk y (transmisje),¢           lda #$00¢           sta frtrack     liczba ③cieəek jest ustalana na 40 jednostronnie,¢           lda frden¢           bne eA40C¢           inc frden       a g❎sto③⇨ na single.¢¢  eA40C    lda #$00        Po czym procedura si❎ koczy.¢           rts¢¢  eA40F    jsr rfsec       Dla ramdysku w celu odczytania ustale procedura¢           bmi stddnr      czyta pierwszy sektor,¢¢           lda #$03         a gdy zdo a a ustala przeplot na niedost❎pny,¢           sta frskew¢           lda #$06¢           sta frtrack     liczb❎ ③cieəek na niedost❎pn⇧,¢           lda #$00¢           sta flpflg      Flaga dysku flopy jest kasowana,¢           sta frden       g❎sto③⇨ ustawiana jest na double,¢           sta frmode      typ katalogu na sparta,¢           sta btspsec     a liczb❎ bajtw w sektorze na 256.¢           rts¢¢      Procedura wy③wiela tekst.¢¢           org $A42D Set Text Drive DoN't Responded.¢¢  dlc      equ $7D9¢  ddnrtxt  equ $AD3F¢¢  stddnr   lda <ddnrtxt    Procedura umieszcza wska♪nik do tekstu¢           sta dlc+1¢           lda >ddnrtxt    w adresach DLC i koczy dzia anie.¢           sta dlc+2¢           lda #$FF¢           rts¢¢           org $A43A GET Drive STatus.¢¢  dcmnd    equ $302¢  dstats   equ $303¢  dbufa    equ $304¢  dtimlo   equ $306¢  dbyt     equ $308¢  siocnter equ $7AA¢  lbuff    equ $A97¢¢  sdajlsio equ $A953¢  waitftk  equ $A9E7¢¢  getdst   lda <lbuff      Procedura ustawia adres buforu,¢           sta dbufa¢           lda >lbuff¢           sta dbufa+1¢¢           lda #'S'        kod komendy status,¢           sta dcmnd¢           lda #$04        d ugo③⇨ buforu dla niej na 4 bajty,¢           sta dbyt¢           lda #$00¢           sta dbyt+1¢           lda #$02        oraz czas operacji.¢           sta dtimlo¢           lda #$FF¢           sta siocnter    Teraz ustawia licznik powtrze operacji,¢¢  eA45D    lda #$40        ustawia status na odczyt,¢           sta dstats¢           jsr sdajlsio    wywo uje funkcj❎ DCB i¢           bpl eA472       sprawdza wynik.¢           inc siocnter    Gdy wyst⇧pi  b ⇧d procedura zwi❎ksza licznik wywo a¢           bne eA472¢           jsr waitftk     i gdy jest on niezerowy oczekuje chwilk❎ na klawisz,¢           jmp eA45D       a gdy go nie naci③ni❎to procedura powtarza operacj❎.¢¢  eA472    cpy #$00        Podczas koczenia dzia ania procedura uaktualnia¢           rts             rejestr F.¢¢      Procedura czyta pierwszy sektor dyskowy.¢¢           org $A475 Read First Sector.¢¢  dcmnd    equ $302¢  dstats   equ $303¢  dbyt     equ $308¢  daux     equ $30A¢¢  sdajlsio equ $A953¢¢  rfsec    lda #$40        Na pocz⇧tku procedura ustala pola DCB,¢           sta dstats      status na czytanie danych,¢           asl @           d ugo③⇨ sektora na $80 bajtw,¢           sta dbyt¢           rol @¢           sta dbyt+1¢           sta daux+1      numer sektora na 1,¢           rol @¢           sta daux¢           lda #'R'        a komend❎ na czytaj sektor.¢           sta dcmnd¢           jmp sdajlsio    Na kocu wywo uje funkcj❎.¢¢           Procedura wy③wietla dane o ustawieniu ustawieniach uəytkownika.¢¢           org $A491 Print Disk DATA.¢¢  icbaz    equ $24¢  icblz    equ $28¢  flpflg   equ $7AC¢  frtmp    equ $7B3¢  frskew   equ $7BA¢  frtafrm  equ $ABA2¢  frtadoff equ $ABC6¢  frtidx   equ $ABCB¢  frtlen   equ $ABD0¢  frtadto  equ $ABD5¢¢  psecabts equ $A4D9¢  sfvar    equ $A52C¢¢¢  pddata   bit flpflg      Na pocz⇧tku procedura sprawdza jakiego dysku dotycz⇧¢           bpl eA499       ustawienia.¢¢           jsr sfvar       Dla dyskw mi❎kich ustalane s⇧ warto③ci dyskowe.¢¢  eA499    jsr psecabts    Nast❎pnie procedura wy③wietla liczb❎ sektorw.¢¢           ldx #$04        Teraz procedura okre③la liczb❎ wy③wietlanych¢  eA49E    stx frtmp       zmiennych,¢           ldy frtidx,x    teraz pobierany jest indeks zmiennej,¢           lda frskew,y    jest on zwi❎kszany dla odpowiednich g❎sto③ci,¢           asl @           mnoəony przez dwa,¢           adc frtadoff,x  dodwane jest przesuni❎cie.¢           tay             wed ug tak ustalonego indeksu¢           lda frtafrm,y   pobierany i ustalany jest z tabeli wska♪nik¢           sta icbaz       do tekstu informacyjnego.¢           lda frtafrm+1,y¢           sta icbaz+1¢           ldy frtlen,x    Teraz ustalany jest ekranowy adres wy③wietlanych¢           txa             danych.¢           asl @¢           tax¢           lda frtadto,x¢           sta icblz¢           lda frtadto+1,x¢           sta icblz+1¢  eA4C6    cpy #$00¢           beq eA4D2¢           dey¢           lda (icbaz),y   I tekst jest przepisywany na ekran.¢           sta (icblz),y¢           jmp eA4C6¢¢  eA4D2    ldx frtmp       po przepisaniu wszystkich zmiennych¢           dex¢           bpl eA49E¢           rts             procedura si❎ koczy.¢¢      Procedura oblicza i wy③wietla liczb❎ sektorw i ca kowit⇧ liczb❎ bajtw¢  na dysku.¢¢           org $A4D9 Print number of SECtors and total ByTeS.¢¢  cassec   equ $462¢  casbts   equ $470¢  btspsec  equ $7A0¢  tsecnum  equ $7A2¢  decout   equ $A45¢  divend   equ $A52¢¢  tointer  equ $A9FD¢  todecout equ $AA14¢¢  psecabts lda tsecnum     Na pocz⇧tku procedura zamienia liczb❎ sektorw¢           sta divend¢           lda tsecnum+1¢           sta divend+1¢           lda #$00¢           sta divend+2¢           jsr todecout    na liczb❎ dziesi❎tn⇧.¢¢           ldx #$04        Po czym wy③wietla j⇧ w odpowiednim miejscu¢  eA4EF    lda decout+3,x  ekranu.¢           jsr tointer¢           sta cassec,x¢           dex¢           bpl eA4EF¢¢           lda #$00        Teraz procedura ustala liczb❎ bajtw poprzez¢           sta divend      jej przemnoəenie razy 256.¢           lda tsecnum¢           sta divend+1¢           lda tsecnum+1¢           sta divend+2¢¢           bit btspsec     Nast❎pnie procedura sprawdza czy sektory s⇧¢           bpl eA51A       256 bajtowe¢¢           lsr divend+2    i gdy tak nie jest dzieli liczb❎ bajtw¢           ror divend+1    przez dwa.¢           ror divend¢¢  eA51A    jsr todecout    Teraz zamienia liczb❎ na ci⇧g znakw i¢¢           ldx #$07¢  eA51F    lda decout,x    wy③wietla na ekranie.¢           jsr tointer¢           sta casbts,x¢           dex¢           bpl eA51F¢           rts¢¢      Procedura ustawia rejestry dysku wed ug ustale urzytkownika.¢¢           org $A52C Set Format VARiable.¢¢  btspsec  equ $7A0¢  secptrk  equ $7A1¢  tsecnum  equ $7A2¢  dsktpe   equ $7A4¢  usskwflg equ $7A5¢  hsskwflg equ $7A6¢  _77flg   equ $7A7¢  dskid    equ $7A8¢  tsnidx   equ $7A9¢  frskew   equ $7BA¢  frden    equ $7BB¢  frtrack  equ $7BD¢  tsntab   equ $AA22¢  bps77tab equ $AA46¢  dtp77tab equ $AA48¢  spt77tab equ $AA4A¢  bpstab   equ $AA4C¢  dtptab   equ $AA4F¢  spttab   equ $AA52¢  dskidtab equ $AA55¢¢  sfvar    ldx frtrack     Na pocz⇧tku procedura ustawia DSKID poprzez¢           lda dskidtab,x  tablic❎.¢           sta dskid¢¢           ldy #$00        Nast❎pnie procedura sprawdza czy chodzi o stacj❎¢           and #$7F        8 calow⇧ (77 ③cieəek) i¢           cmp #$4D¢           bne eA53E¢           dey¢  eA53E    sty _77flg      ustawia odpowiedni⇧ flag❎.¢           txa¢           asl @¢           sta tsnidx¢           asl @¢           adc tsnidx      Teraz procedura ustala indeks do tablicy danych¢           sta tsnidx      dyskowych (przemnoəony przez 6).¢¢           ldx frden¢           bit _77flg      Nast❎pnie sprawdza o jak⇧ stacj❎ chodzi.¢           bmi eA56A¢¢           lda bpstab,x    Gdy o normaln⇧ to w zaleəno③ci od g❎sto③ci¢           sta btspsec     ustawia liczb❎ bajtw w sektorze,¢           lda dtptab,x¢           sta dsktpe      typ dysku,¢           lda spttab,x¢           sta secptrk     i liczb❎ sektorw na ③cieəce.¢           jmp eA57C¢¢  eA56A    lda bps77tab,x  Dla stacji 8 calowej poczynania s⇧ identyczne¢           sta btspsec     lecz procedura korzysta z innych tablic.¢           lda dtp77tab,x¢           sta dsktpe¢           lda spt77tab,x¢           sta secptrk¢¢  eA57C    txa¢           asl @¢           adc tsnidx      Teraz ustawiany jest indeks do tablic liczby¢           tax             sektorw (indeks g❎sto③ci * 3)¢           lda tsntab,x¢           sta tsecnum¢           lda tsntab+1,x¢           sta tsecnum+1   i ustawiana jest ca kowita liczba sektorw.¢¢           lda #$00¢           sta usskwflg¢           sta hsskwflg    Teraz kasowane s⇧ flagi szybkich transmisji.¢¢           ldx frskew      I procedura sprawdza jak⇧ wybra  urzytkownik i¢           beq eA5A3       ustawia odpowiednie flagi.¢           cpx #$02¢           beq eA5A6¢           dec hsskwflg    Gdy HIGH.¢           rts¢  eA5A3    dec usskwflg    Gdy US.¢  eA5A6    rts             Gdy normal.¢¢      Procedura dokonuje fizycznego formatowania dysku.¢¢           org $A5A7 Format DiSK Procedure.¢¢  zbufa    equ $43¢  dcmnd    equ $302¢  dstats   equ $303¢  dtimlo   equ $306¢  dbyt     equ $308¢  btspsec  equ $7A0¢  secptrk  equ $7A1¢  usskwflg equ $7A5¢  hsskwflg equ $7A6¢  prcmflg  equ $7AB¢  frskew   equ $7BA¢  frden    equ $7BB¢  dlc      equ $7D9¢  lbuff    equ $A97¢  denskew  equ $AA5B¢  idprtxt  equ $AC5F¢  fdtxt    equ $AC7F¢  dfstxt   equ $AC9F¢  dcrustxt equ $AD5F¢  dcrhstxt equ $AD7F¢¢  getdst   equ $A43A¢  pddata   equ $A491¢  spercom  equ $A671¢  wdirs    equ $A61D¢  eicdproc equ $A733¢  eifdproc equ $A739¢  sdajlsio equ $A953¢  getkey   equ $A9AA¢  stawait  equ $A9DD¢¢  fdskp    lda hsskwflg    Na pocz⇧tku procedura kasuje flag❎ HIGH, a jej¢           sta usskwflg    warto③ci⇧ inicjuje flag❎ US.¢           lda #$00¢           sta hsskwflg¢¢           lda <idprtxt    Teraz procedura wy③wietla tekst i¢           sta dlc+1¢           lda >idprtxt¢           sta dlc+2¢¢  eA5BC    jsr getkey      oczekuje naci③ni❎cia kawisza RETURN.¢           cmp #$9B¢           bne eA5BC¢¢  eA5C3    lda <fdtxt      Gdy klawisz ten zosta  naci③ni❎ty procedura¢           sta dlc+1       wy③wietla nast❎pny tekst 'Formating...'¢           lda >fdtxt¢           sta dlc+2¢¢           jsr getdst      Nast❎pnie pobiera status stacji dyskw.¢           bit prcmflg¢           bpl eA60D¢¢           jsr spercom     Gdy stacja obs uguje PERCOM jest on ustawiany¢           bit usskwflg    i procedura sprawdza czy ma si❎ odby⇨ w transmisji¢           bmi eA5E5       US.¢¢           jsr sdajlsio    Dla transmisji HIGHT procedura nadaje PERCOM,¢           bpl eA60D¢¢           jmp eicdproc    a gdy wyst⇧pi  b ⇧d koczy dzia anie.¢¢  eA5E5    lda #'f'        Dla transmisji US ustawiany jest odpowiedni kod¢           sta dcmnd       komendy formatuj⇧cej,¢           ldx #$80¢           stx dbyt        ustalana jest d ugo③⇨ buforu.¢¢           lda frden       Teraz procedura dla odpowiedniej g❎sto③ci¢           asl @           ustawia wska♪nik do tablicy przeplotu sektorw.¢           tax¢           lda denskew,x¢           sta zbufa¢           lda denskew+1,x¢           sta zbufa+1¢¢           ldy #$00¢  eA600    lda (zbufa),y   Nast❎pnie w buforze komunikacji ustalany jest ten¢           sta lbuff+$C,y  przeplot¢           iny¢           cpy secptrk¢¢  eA609    bne eA600¢           beq eA634       i wykonywana jest operacja formatowania.¢¢  eA60D    lda #'!'        Dla formatw zwyk ych lub HIGH ustalany jest rozkaz¢           ldx frden       formatowania !-dla single lub percom, a¢           cpx #$02¢           bne eA618¢           lda #'"'        "-dla dual (enhanced alias medium).¢  eA618    bit hsskwflg    Teraz procedura sprawdza chy chodzi o HIGH.¢           bpl eA61F¢           ora #$80        Gdy tak jest rozkaz jest ustawiany w negatyw¢¢  eA61F    sta dcmnd       i ustalana jest odpowiednia komenda.¢           lda btspsec¢           sta dbyt        Nast❎pnie procedura ustala d ugo③⇨ buforu¢           eor #$80¢           asl @¢           rol @¢           sta dbyt+1      odpowiednio do g❎sto③ci i ustawia¢           lda #$40¢           sta dstats      status na odczyt,¢  eA634    lda #$F8¢           sta dtimlo      nast❎pnie ustala czas operacji,¢           jsr sdajlsio    i wywo uje funkcj❎ DCB.¢           bpl eA665¢           bit usskwflg    Gdy operacja si❎ nie powiod a, a transmisja¢           bpl eA64B       ustawiona by a na US¢           bmi eA65C¢¢           lda <dcrustxt   procedura powinna wy③wietla⇨ tekst 'DRIVE CAN'T RUN¢           ldx >dcrustxt   US !' ale nigdy tego nie robi.¢           bne eA654¢¢  eA64B    bit hsskwflg    Nast❎pnie procedura sprawdza czy ustawiona by a¢           bpl eA662       transmisja HIGH¢¢           lda <dcrhstxt   i gdy tak by o wypisuje 'DRIVE CAN'T RUN HIGHSPEED!'¢           ldx >dcrhstxt¢¢  eA654    ldy #$02        Teraz procedura wy③wietla tekst i chwil❎¢           jsr stawait     oczekuje, nast❎pnie zmienia przeplot (rodzaj¢           inc frskew      transmisji),¢¢  eA65C    jsr pddata      wy③wietla nowe ustawienia na ekran i¢           jmp eA5C3       ponawia prb❎ formatowania.¢¢  eA662    jmp eifdproc    Gdy procedura sprawdzi wszystkie kombinacje i nie¢                           sformatuje dysku wy③wietla komunikat o b ❎dzie.¢¢  eA665    lda <dfstxt     W przeciwnym wypadku wy③wietla komunikat o¢           ldx >dfstxt     prawid owym przebiegu procedury i¢           ldy #$01¢           jsr stawait     po chwili oczekiwania przechodzi do¢           jmp wdirs       nagrywania katalogu.¢¢      Procedura ustawia PERCOM do wys ania.¢¢           org $A671 Set Percom data.¢¢  dcmnd    equ $302¢  dstats   equ $303¢  dbyt     equ $308¢  daux     equ $30A¢  btspsec  equ $7A0¢  secptrk  equ $7A1¢  dsktpe   equ $7A4¢  dskid    equ $7A8¢  lbuff    equ $A97¢¢  spercom  ldx #$00        Na pocz⇧tku procedura czy③ci bufor lbuff uəywany¢           txa             jako bufor operacji.¢  eA674    sta lbuff,x¢           inx¢           bpl eA674¢¢           sta dbyt+1      Nast❎pnie kasuje starsze bajty d ugo③ci i numeru¢           sta daux+1      sektoru.¢¢           lda #$80¢           sta dstats      Teraz ustawia operacj❎ nadawania,¢¢           lda #$04¢           sta daux        numer sektora (pierwszy po boot sektorach),¢           lda dskid¢           and #$7F¢           sta lbuff       liczb❎ ③cieəek,¢           lda secptrk¢           sta lbuff+3     liczb❎ sektorw na ③cieəce,¢           ldx #$01¢           stx lbuff+1     krok g owicy,¢           lda btspsec¢           sta lbuff+7     liczba bajtw w sektorze,¢           bmi eA6A8¢           inc lbuff+6     dla 256 zwi❎ksza starszy bajt,¢  eA6A8    lda dsktpe¢           sta lbuff+5     oraz kod typu dysku.¢¢           lda dskid       Nast❎pnie ustawia liczb❎ stron dysku¢           and #$80¢           asl @           (zaznaczona jako najstarszy bit dskid).¢           rol @¢           sta lbuff+4¢¢           lda #$FF¢           sta lbuff+8     Na samym kocu wstawia bajt kontroli transmisji i¢¢           lda #'O'        ustawia pole DCB, kod operacji i¢           sta dcmnd¢           lda #$0C¢           sta dbyt        d ugo③⇨ buforu.¢           rts¢¢           end of doc¢