home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1991 Janurary / 64er_Magazin_91-01_1991_Markt__Technik_de_Side_A.d64 / quelltext < prev    next >
Text File  |  2022-10-26  |  12KB  |  609 lines

  1.  
  2. phc
  3.  
  4. tit.tse-format J.Kloehn, H.-Duncker-Str.83, DDR-1157 Berlin, Tel.(00372)5082744
  5.  
  6. :starok = 1
  7.  
  8. ;*** labeldef ***
  9.  
  10. :chrin  = $ffcf
  11. :getin  = $ffe4
  12.  
  13. ;*** makros ***
  14.  
  15. :strout m 1
  16.  
  17.         lda #<@0
  18.         ldy #>@0
  19.         jsr $ab1e
  20. /
  21.  
  22. :input mf 3
  23.  
  24.         strout @0
  25.         ldy #0
  26. :input1 jsr chrin
  27.         sta $0200,y
  28.         iny
  29.         cmp #13
  30.         bne input1
  31.  
  32.         ldy #0
  33.         ldx #0
  34. :input3 lda $0200,x
  35.         cmp #13
  36.         bne input2
  37.         lda #$a0
  38.         b $24
  39. :input2 inx
  40.         sta @1,y
  41.         iny
  42.         cpy #@2
  43.         bne input3
  44. /
  45.  
  46. :floppy m 4
  47.  
  48. ;rama   = @0
  49. ;rame   = @1
  50. ;datadr = @2
  51. ;stradr = @3
  52.  
  53.         ldy #@1-@0/32+1
  54.         ldx #@1-@0&31
  55.         lda #<@0
  56.         sta $fb
  57.         lda #>@0
  58.         sta $fc
  59.         lda #<@2
  60.         sta addr
  61.         lda #>@2
  62.         sta addr+1
  63.         jsr flopp1    ;m-w
  64. if @3
  65.         ldy #>@3
  66.         lda #<@3
  67.         jsr flopp5    ;m-e
  68. ei
  69.  
  70. /
  71.  
  72. ;*** basicstart ***
  73.  
  74.  
  75. if starok
  76.  
  77. org $0801
  78.  
  79. :basic  w 256,0
  80.         b 158,"2111:",143
  81.         b 34,141,145,8,142,154
  82.         b "tse-format v1.1  by "
  83.         b 5,"?save error"
  84.         b 154," in 1989 "
  85.         s 3
  86.  
  87. el
  88.  
  89. org $c000
  90.  
  91. ei
  92.  
  93.         lda #0
  94.         sta $d020
  95.         sta $d021
  96.  
  97.         input text1,name-fstart+start,16
  98.         input text2,id-fstart+start,2
  99.         input text3,idflag-fstart+start,1
  100.  
  101.         strout text4
  102. :hptpr1 jsr getin
  103.         beq hptpr1
  104.  
  105.         floppy start,fend-fstart+start,fstart,fstart
  106.         strout text5
  107.  
  108.         pla       ;ruecksprungaddr
  109.         pla       ;vom stack holen
  110.         jmp $a474 ;eingabe-warteschleife
  111.  
  112. ;*** daten ****
  113.  
  114. :text1  b 147,30,14,"           TSE-Format V1.1",13
  115.         b "           ---------------",13,13
  116.         b " (c) 1990 Markt & Technik Verlag AG",13
  117.         b "          (w) Juergen Kloehn",13,13,13,13,13
  118.         b "Diskettenname: ",0
  119. :text2  b 13,13,"ID: ",0
  120. :text3  b 13,13,"ID fortlaufend erhoehen (j/n) ? ",0
  121. :text4  b 13,13,13,"Bitte 1.Disk zum formatieren einlegen!",0
  122. :text5  b 13,13
  123.         b "Disketten werden formatiert!",13
  124.         b "Ende mit beliebiger Operation fuer Disk",13,0
  125.  
  126.  
  127. ;*** teil von makro floppy ***
  128.  
  129. :flopp1 stx anz       ;inn schleif
  130.         sty anz+1     ;auss  "
  131.  
  132. :flopp4 lda $ba       ;geraet 8
  133.         jsr $ffb1     ;listen senden
  134.         lda #$6f      ;sek 15
  135.         jsr $ff93     ;senden
  136.  
  137.         jsr kopf      ;m-w senden
  138.         ldx anz       ;inn schl.zaehl
  139.         beq flopp7
  140.  
  141.         ldy #0        ;x bytes senden
  142. :flopp3 lda ($fb),y
  143.         jsr $ffa8
  144.         inc $fb
  145.         bne flopp2
  146.         inc $fc
  147. :flopp2 dex
  148.         bne flopp3
  149.  
  150. :flopp7 jsr $ffae     ;unlisten
  151.  
  152.         clc           ;floppaddr
  153.         lda addr      ;+ anz der gesend.
  154.         adc anz       ;bytes
  155.         sta addr
  156.         lda addr+1
  157.         adc #0
  158.         sta addr+1
  159.  
  160.         ldx #32       ;inn schl. mit 32
  161.         stx anz
  162.  
  163.         dec anz+1     ;auss schleife
  164.         bne flopp4    ;einschl. 0
  165.  
  166.         rts
  167.  
  168. :kopf   ldy #0        ;sendet m-w
  169. :kopf1  lda dat,y
  170.         jsr $ffa8
  171.         iny
  172.         cpy #6
  173.         bne kopf1
  174.         rts
  175.  
  176. :dat    b "m-w"
  177. :addr   w 0
  178. :anz    b 0
  179.         b 0           ;anz hi zwischensp
  180.  
  181. :flopp5 sta addr2
  182.         sty addr2+1
  183.  
  184.         lda $ba       ;geraet 8
  185.         jsr $ed0c     ;listen senden
  186.         lda #$6f      ;sek 15
  187.         jsr $edb9     ;senden
  188.  
  189.         ldy #0        ;m-e senden
  190. :flopp6 lda dat2,y
  191.         jsr $ffa8
  192.         iny
  193.         cpy #5
  194.         bne flopp6
  195.  
  196.         jmp $edfe     ;unlisten
  197.  
  198. :dat2   b "m-e"
  199. :addr2  w 0
  200.  
  201.  
  202.  
  203. ;*** floppyprogramm ***
  204.  
  205. :start
  206.  
  207.         org $0400
  208.  
  209.  
  210. :fstart jsr $c100    ;lampe an
  211.  
  212.         sei
  213.         lda $1c00    ;motor an
  214.         ora #$04
  215.         sta $1c00
  216.  
  217.         lda $22      ;akt track
  218.         bne new1     ;=0 (nach uj)
  219.         lda #46      ;46 tracks
  220.         sta $22      ;nach aussen
  221.  
  222. :new1   dec $22      ;1. track anfahren
  223.         beq new19
  224.         jsr stepa    ;1 track nach aussen
  225.         beq new1     ;absolut
  226.  
  227. :new19  lda #1       ;track1
  228.         sta $22      ;setzen
  229.  
  230.         lda id       ;id setzen
  231.         sta $12
  232.         lda id+1
  233.         sta $13
  234.  
  235.         ldx #0       ;stepmotor
  236.         jsr step     ;reset
  237.  
  238.         jsr speed    ;speedflags setzen
  239.  
  240.         lda #$20     ;motor an
  241.         sta $20      ;fuer lw status
  242. :new22  cli
  243.         lda $7c      ;atn ?
  244.         beq new29
  245.         jmp fertig
  246.  
  247. :new29  sei
  248.  
  249.         lda #1       ;endtrack fuer test
  250.         b $2c
  251. :new23  lda #35      ;sonst format
  252.         sta $1b
  253.  
  254.         jsr setwr
  255.  
  256.         jsr form     ;disk formatieren
  257.  
  258.         cmp #35      ;letzer track
  259.         beq new20
  260.  
  261.         jsr sync     ;test auf disc im laufwerk
  262.         bcs new22    ;format track1
  263.  
  264.         lda $1c00    ;schreibschutz abfragen
  265.         and #$10
  266.         beq new22    ;ja, dann weiter warten
  267.         lda #$10     ;flag 'kein schreibschutz'
  268.         sta $1e      ;setzten
  269.  
  270.         ldy #0       ;warten bis
  271. :wait   inx          ;dischebel
  272.         bne wait     ;geschlossen
  273.         iny
  274.         bne wait
  275.         beq new23    ;format all
  276.  
  277. :new20  lda #$20     ;motor an
  278.         sta $20      ;fuer laufw.status
  279.         lda $1c00    ;lampe aus
  280.         and #$f7
  281.         sta $1c00
  282.  
  283. :new24  cli
  284.         lda $7c      ;atn ?
  285.         beq new28
  286. :fertig lda #$10     ;motor soll
  287.         sta $20      ;nachlaufen
  288.         jmp $d042    ;init + schluss
  289.  
  290. :new28  sei
  291.         jsr sync     ;disc noch drinn
  292.         bcc new24
  293.  
  294.         lda idflag   ;id erhoehen ?
  295.         cmp #'j
  296.         bne new27
  297.  
  298.         ldx #1       ;id=id+1
  299. :new26  inc id,x
  300.         lda id,x
  301.         cmp #':
  302.         bne new25
  303.         adc #6
  304.         sta id,x
  305. :new25  cmp #'[
  306.         bne new27
  307.         lda #'0
  308.         sta id,x
  309.         dex
  310.         beq new26
  311.  
  312. :new27  jmp fstart
  313.  
  314. ;--------------------
  315. ;track nach innen fahren und
  316. ;speed setzen
  317. :stepi  ldy #$02     ;2 halbspuren
  318. :new2   ldx $1c00    ;stepmotor
  319.         inx          ;nach aussen
  320.         jsr step
  321.         dey
  322.         bne new2
  323.         inc $22      ;trackzaehler erhoehen
  324.         jmp speed    ;speedflags setzen
  325.  
  326.  
  327. ;--------------------
  328. ;nstep um 1 track nach aussen
  329. :stepa  ldy #$02     ;2 halbspuren
  330. :new3   ldx $1c00    ;stepmotor
  331.         dex          ;nach aussen
  332.         jsr step
  333.         dey
  334.         bne new3
  335.         rts
  336.  
  337. ;--------------------
  338. ;stepmotor ansteuern
  339. ;wert in x
  340. :step   txa
  341.         and #$03
  342.         sta $bb
  343.  
  344.         lda $1c00
  345.         and #$fc     ;stepmot
  346.         ora $bb      ;setzen
  347.         sta $1c00
  348.  
  349.         lda #$04     ;warten
  350.         sta $bb
  351.         ldx #0
  352. :new4   dex
  353.         bne new4
  354.         dec $bb
  355.         bne new4
  356.  
  357.         rts
  358. ;--------------------
  359. ;speedflags setzen
  360. :speed  lda $22      ;spurnummer
  361.         jsr $f24b    ;anz der sek holen
  362.         txa          ;speednewags setzen
  363.         asl
  364.         asl
  365.         asl
  366.         asl
  367.         asl
  368.         sta $44
  369.         lda $1c00
  370.         and #$9f
  371.         ora $44
  372.         sta $1c00
  373.         rts
  374. ;--------------------
  375. ;kopfelektronik auf schreiben schalten
  376. :setwr  lda $1c0c
  377.         and #$1f
  378.         ora #$c0
  379.         sta $1c0c
  380.         lda #$ff
  381.         sta $1c03
  382.         sta $1c01    ;$ff schreiben
  383.         rts
  384. ;--------------------
  385. ;auf sync warten
  386. ;floppy-buch S.373
  387. :sync   jsr $fe00
  388.         lda #$ff
  389.         sta $1805
  390. :sync2  bit $1805
  391.         bpl sync1
  392.         bit $1c00
  393.         bmi sync2
  394.         lda $1c01
  395.         clv
  396.         clc
  397.         b $24
  398. :sync1  sec
  399.         rts
  400.  
  401. ;--------------------
  402. :form   lda #$ee     ;byte-ready-leitung
  403.         sta $1c0c    ;freigeben
  404.         lda #4       ;datenpuffer
  405.         sta $f9
  406.  
  407.         lda $22      ;spurnr
  408.         jsr $f24b    ;max sektanz holen
  409.         sta $43      ;merken
  410.  
  411.         jsr setwr    ;auf schreiben schalten
  412.  
  413.         lda #$ff     ;$ff schreiben
  414.         sta $1c01
  415.  
  416. ;+++ headerdaten bereitstellen +++
  417.         lda #0       ;sektnr
  418.         sta $bc      ;merken
  419.         tax
  420.         tay
  421.  
  422. :new5   lda $39      ;kennzeichen fuer datenblock (8)
  423.         sta $0300,y
  424.         lda $bc      ;sektnr
  425.         sta $0302,y
  426.         lda $22      ;tracknr
  427.         sta $0303,y
  428.         lda $13      ;id2
  429.         sta $0304,y
  430.         lda $12      ;id1
  431.         sta $0305,y
  432.         lda #$0f     ;abschlussbytes
  433.         sta $0306,y
  434.         sta $0307,y
  435.  
  436.         lda #0       ;pruefsumme
  437.         eor $0302,y  ;berechnen
  438.         eor $0303,y
  439.         eor $0304,y
  440.         eor $0305,y
  441.         sta $0301,y  ;und speichern
  442.  
  443.         clc          ;8 bytes weiter
  444.         tya
  445.         adc #$08
  446.         tay
  447.  
  448.         inc $bc      ;sektnr erhoehen
  449.         lda $bc
  450.         cmp $43      ;<maxsekt?
  451.         bcc new5
  452.  
  453.         tya          ;byteanz (sektanz*8)
  454.         pha
  455.  
  456.         lda #$03     ;puffernr setzen
  457.         sta $31      ;fuer routine
  458.         jsr $fe30    ;blockheader nach gcr
  459.  
  460.         pla
  461.         tay          ;byteanz
  462.         dey
  463.         jsr $fde5    ;bytes nach oben kopieren
  464.         jsr $fdf5    ;zusatzpuffer nach $0300
  465.  
  466. ;+++ daten bereitstellen ++++
  467.         jsr $ef41    ;pufferzeiger setzen
  468.         jsr $f008    ;datenpuffer loeschen
  469.         lda #$ff     ;2.byte fuer 18,01
  470.         sta $0701    ;sonst egal
  471.  
  472.         lda #$07     ;datenpuffer
  473.         sta $31
  474.         jsr $f5e9    ;pruefsumme ber.
  475.         sta $3a      ;merken
  476.  
  477.         jsr $f78f    ;daten nach gcr
  478.  
  479.         lda #0       ;zeiger auf akt sektheader
  480.         sta $32
  481.  
  482. ;+++ einen sektor schreiben (($bc) mal)+++
  483. :new14  lda #$ff     ;sync schreiben
  484.         sta $1c01
  485.         ldx #$05     ;5 mal
  486. :new7   bvc new7
  487.         clv
  488.         dex
  489.         bne new7
  490.  
  491.         ldx #$0a     ;10 headerdaten(gcr)
  492.         ldy $32
  493. :new8   bvc new8
  494.         clv
  495.         lda $0300,y  ;schreiben
  496.         sta $1c01
  497.         iny
  498.         dex
  499.         bne new8
  500.  
  501.         sty $32      ;zeiger auf naech.
  502.                      ;header setzen
  503.  
  504.         ldx #$08     ;$55 schreiben
  505. :new9   bvc new9     ;8 mal
  506.         clv          ;als luecke
  507.         lda #$55
  508.         sta $1c01
  509.         dex
  510.         bne new9
  511.  
  512.         lda #$ff     ;sync schreiben
  513.         ldx #$05
  514. :new10  bvc new10
  515.         clv
  516.         sta $1c01
  517.         dex
  518.         bne new10
  519.  
  520.         ldx #$bb     ;daten (gcr) schreiben
  521. :new11  bvc new11    ;erst aus zusatzpuffer
  522.         clv
  523.         lda $0100,x
  524.         sta $1c01
  525.         inx
  526.         bne new11
  527.  
  528.         ldy #$00     ;dann aus normalen puffer
  529. :new12  bvc new12
  530.         clv
  531.         lda ($30),y
  532.         sta $1c01
  533.         iny
  534.         bne new12
  535.  
  536.         lda #$55     ;$55 als luecke schreiben
  537.         ldx #$08
  538. :new13  bvc new13
  539.         clv
  540.         sta $1c01
  541.         dex
  542.         bne new13
  543.  
  544.         dec $bc      ;sektanz
  545.         bne new14
  546.  
  547. :new15  bvc new15    ;warten
  548.         clv
  549. :new16  bvc new16
  550.         clv
  551.  
  552.         jsr $fe00    ;auf lesen schalten
  553.  
  554. ;+++ track 18 beschreiben +++
  555.         lda $22      ;spur = 18
  556.         cmp #18
  557.         bne new30    ;nein
  558.  
  559.         pha          ;spur merken
  560.         lda #$84     ;Kanal-Puffer-Zuordnung
  561.         sta $b4
  562.         jsr $ef41    ;pufferzeiger setzen
  563.         jsr $f008    ;puffer loeschen
  564.         jsr $eeb7    ;bam erzeugen
  565.         lda #$11     ;track 18
  566.         sta $0748    ;als belegt
  567.         lda #$fc     ;kennzeichnen
  568.         sta $0749
  569.  
  570.         ldy #idflag-name-1
  571. :new6   lda name,y   ;name,id
  572.         sta $0790,y  ;kopieren
  573.         dey
  574.         bpl new6
  575.  
  576.         lda #$41     ;formatkennzeichen
  577.         sta $0702
  578.  
  579.         lda #18      ;track 18
  580.         sta $0e
  581.         lda #0       ;sekt 0
  582.         sta $0f
  583.         cli
  584.         jsr $d58a    ;schreiben
  585.         sei
  586.         pla          ;spurnr
  587.  
  588. :new30  cmp $1b      ;alle tracks ?
  589.         beq new17    ;ja, dann fertig
  590.  
  591.         jsr stepi    ;track nach innen
  592.  
  593.         jmp form     ;naechsten track formatieren
  594.  
  595. :new17  rts
  596.  
  597. ;--------------------
  598.  
  599. :name   b "                "
  600.         b $a0,$a0
  601. :id     b "  "
  602.         b $a0,"2a",$a0,$a0,$a0,$a0
  603. :idflag b 0
  604. :fend
  605.  
  606.  
  607.  
  608. ;  ENDE
  609.