home *** CD-ROM | disk | FTP | other *** search
-
- phc
-
- tit.tse-format J.Kloehn, H.-Duncker-Str.83, DDR-1157 Berlin, Tel.(00372)5082744
-
- :starok = 1
-
- ;*** labeldef ***
-
- :chrin = $ffcf
- :getin = $ffe4
-
- ;*** makros ***
-
- :strout m 1
-
- lda #<@0
- ldy #>@0
- jsr $ab1e
- /
-
- :input mf 3
-
- strout @0
- ldy #0
- :input1 jsr chrin
- sta $0200,y
- iny
- cmp #13
- bne input1
-
- ldy #0
- ldx #0
- :input3 lda $0200,x
- cmp #13
- bne input2
- lda #$a0
- b $24
- :input2 inx
- sta @1,y
- iny
- cpy #@2
- bne input3
- /
-
- :floppy m 4
-
- ;rama = @0
- ;rame = @1
- ;datadr = @2
- ;stradr = @3
-
- ldy #@1-@0/32+1
- ldx #@1-@0&31
- lda #<@0
- sta $fb
- lda #>@0
- sta $fc
- lda #<@2
- sta addr
- lda #>@2
- sta addr+1
- jsr flopp1 ;m-w
- if @3
- ldy #>@3
- lda #<@3
- jsr flopp5 ;m-e
- ei
-
- /
-
- ;*** basicstart ***
-
-
- if starok
-
- org $0801
-
- :basic w 256,0
- b 158,"2111:",143
- b 34,141,145,8,142,154
- b "tse-format v1.1 by "
- b 5,"?save error"
- b 154," in 1989 "
- s 3
-
- el
-
- org $c000
-
- ei
-
- lda #0
- sta $d020
- sta $d021
-
- input text1,name-fstart+start,16
- input text2,id-fstart+start,2
- input text3,idflag-fstart+start,1
-
- strout text4
- :hptpr1 jsr getin
- beq hptpr1
-
- floppy start,fend-fstart+start,fstart,fstart
- strout text5
-
- pla ;ruecksprungaddr
- pla ;vom stack holen
- jmp $a474 ;eingabe-warteschleife
-
- ;*** daten ****
-
- :text1 b 147,30,14," TSE-Format V1.1",13
- b " ---------------",13,13
- b " (c) 1990 Markt & Technik Verlag AG",13
- b " (w) Juergen Kloehn",13,13,13,13,13
- b "Diskettenname: ",0
- :text2 b 13,13,"ID: ",0
- :text3 b 13,13,"ID fortlaufend erhoehen (j/n) ? ",0
- :text4 b 13,13,13,"Bitte 1.Disk zum formatieren einlegen!",0
- :text5 b 13,13
- b "Disketten werden formatiert!",13
- b "Ende mit beliebiger Operation fuer Disk",13,0
-
-
- ;*** teil von makro floppy ***
-
- :flopp1 stx anz ;inn schleif
- sty anz+1 ;auss "
-
- :flopp4 lda $ba ;geraet 8
- jsr $ffb1 ;listen senden
- lda #$6f ;sek 15
- jsr $ff93 ;senden
-
- jsr kopf ;m-w senden
- ldx anz ;inn schl.zaehl
- beq flopp7
-
- ldy #0 ;x bytes senden
- :flopp3 lda ($fb),y
- jsr $ffa8
- inc $fb
- bne flopp2
- inc $fc
- :flopp2 dex
- bne flopp3
-
- :flopp7 jsr $ffae ;unlisten
-
- clc ;floppaddr
- lda addr ;+ anz der gesend.
- adc anz ;bytes
- sta addr
- lda addr+1
- adc #0
- sta addr+1
-
- ldx #32 ;inn schl. mit 32
- stx anz
-
- dec anz+1 ;auss schleife
- bne flopp4 ;einschl. 0
-
- rts
-
- :kopf ldy #0 ;sendet m-w
- :kopf1 lda dat,y
- jsr $ffa8
- iny
- cpy #6
- bne kopf1
- rts
-
- :dat b "m-w"
- :addr w 0
- :anz b 0
- b 0 ;anz hi zwischensp
-
- :flopp5 sta addr2
- sty addr2+1
-
- lda $ba ;geraet 8
- jsr $ed0c ;listen senden
- lda #$6f ;sek 15
- jsr $edb9 ;senden
-
- ldy #0 ;m-e senden
- :flopp6 lda dat2,y
- jsr $ffa8
- iny
- cpy #5
- bne flopp6
-
- jmp $edfe ;unlisten
-
- :dat2 b "m-e"
- :addr2 w 0
-
-
-
- ;*** floppyprogramm ***
-
- :start
-
- org $0400
-
-
- :fstart jsr $c100 ;lampe an
-
- sei
- lda $1c00 ;motor an
- ora #$04
- sta $1c00
-
- lda $22 ;akt track
- bne new1 ;=0 (nach uj)
- lda #46 ;46 tracks
- sta $22 ;nach aussen
-
- :new1 dec $22 ;1. track anfahren
- beq new19
- jsr stepa ;1 track nach aussen
- beq new1 ;absolut
-
- :new19 lda #1 ;track1
- sta $22 ;setzen
-
- lda id ;id setzen
- sta $12
- lda id+1
- sta $13
-
- ldx #0 ;stepmotor
- jsr step ;reset
-
- jsr speed ;speedflags setzen
-
- lda #$20 ;motor an
- sta $20 ;fuer lw status
- :new22 cli
- lda $7c ;atn ?
- beq new29
- jmp fertig
-
- :new29 sei
-
- lda #1 ;endtrack fuer test
- b $2c
- :new23 lda #35 ;sonst format
- sta $1b
-
- jsr setwr
-
- jsr form ;disk formatieren
-
- cmp #35 ;letzer track
- beq new20
-
- jsr sync ;test auf disc im laufwerk
- bcs new22 ;format track1
-
- lda $1c00 ;schreibschutz abfragen
- and #$10
- beq new22 ;ja, dann weiter warten
- lda #$10 ;flag 'kein schreibschutz'
- sta $1e ;setzten
-
- ldy #0 ;warten bis
- :wait inx ;dischebel
- bne wait ;geschlossen
- iny
- bne wait
- beq new23 ;format all
-
- :new20 lda #$20 ;motor an
- sta $20 ;fuer laufw.status
- lda $1c00 ;lampe aus
- and #$f7
- sta $1c00
-
- :new24 cli
- lda $7c ;atn ?
- beq new28
- :fertig lda #$10 ;motor soll
- sta $20 ;nachlaufen
- jmp $d042 ;init + schluss
-
- :new28 sei
- jsr sync ;disc noch drinn
- bcc new24
-
- lda idflag ;id erhoehen ?
- cmp #'j
- bne new27
-
- ldx #1 ;id=id+1
- :new26 inc id,x
- lda id,x
- cmp #':
- bne new25
- adc #6
- sta id,x
- :new25 cmp #'[
- bne new27
- lda #'0
- sta id,x
- dex
- beq new26
-
- :new27 jmp fstart
-
- ;--------------------
- ;track nach innen fahren und
- ;speed setzen
- :stepi ldy #$02 ;2 halbspuren
- :new2 ldx $1c00 ;stepmotor
- inx ;nach aussen
- jsr step
- dey
- bne new2
- inc $22 ;trackzaehler erhoehen
- jmp speed ;speedflags setzen
-
-
- ;--------------------
- ;nstep um 1 track nach aussen
- :stepa ldy #$02 ;2 halbspuren
- :new3 ldx $1c00 ;stepmotor
- dex ;nach aussen
- jsr step
- dey
- bne new3
- rts
-
- ;--------------------
- ;stepmotor ansteuern
- ;wert in x
- :step txa
- and #$03
- sta $bb
-
- lda $1c00
- and #$fc ;stepmot
- ora $bb ;setzen
- sta $1c00
-
- lda #$04 ;warten
- sta $bb
- ldx #0
- :new4 dex
- bne new4
- dec $bb
- bne new4
-
- rts
- ;--------------------
- ;speedflags setzen
- :speed lda $22 ;spurnummer
- jsr $f24b ;anz der sek holen
- txa ;speednewags setzen
- asl
- asl
- asl
- asl
- asl
- sta $44
- lda $1c00
- and #$9f
- ora $44
- sta $1c00
- rts
- ;--------------------
- ;kopfelektronik auf schreiben schalten
- :setwr lda $1c0c
- and #$1f
- ora #$c0
- sta $1c0c
- lda #$ff
- sta $1c03
- sta $1c01 ;$ff schreiben
- rts
- ;--------------------
- ;auf sync warten
- ;floppy-buch S.373
- :sync jsr $fe00
- lda #$ff
- sta $1805
- :sync2 bit $1805
- bpl sync1
- bit $1c00
- bmi sync2
- lda $1c01
- clv
- clc
- b $24
- :sync1 sec
- rts
-
- ;--------------------
- :form lda #$ee ;byte-ready-leitung
- sta $1c0c ;freigeben
- lda #4 ;datenpuffer
- sta $f9
-
- lda $22 ;spurnr
- jsr $f24b ;max sektanz holen
- sta $43 ;merken
-
- jsr setwr ;auf schreiben schalten
-
- lda #$ff ;$ff schreiben
- sta $1c01
-
- ;+++ headerdaten bereitstellen +++
- lda #0 ;sektnr
- sta $bc ;merken
- tax
- tay
-
- :new5 lda $39 ;kennzeichen fuer datenblock (8)
- sta $0300,y
- lda $bc ;sektnr
- sta $0302,y
- lda $22 ;tracknr
- sta $0303,y
- lda $13 ;id2
- sta $0304,y
- lda $12 ;id1
- sta $0305,y
- lda #$0f ;abschlussbytes
- sta $0306,y
- sta $0307,y
-
- lda #0 ;pruefsumme
- eor $0302,y ;berechnen
- eor $0303,y
- eor $0304,y
- eor $0305,y
- sta $0301,y ;und speichern
-
- clc ;8 bytes weiter
- tya
- adc #$08
- tay
-
- inc $bc ;sektnr erhoehen
- lda $bc
- cmp $43 ;<maxsekt?
- bcc new5
-
- tya ;byteanz (sektanz*8)
- pha
-
- lda #$03 ;puffernr setzen
- sta $31 ;fuer routine
- jsr $fe30 ;blockheader nach gcr
-
- pla
- tay ;byteanz
- dey
- jsr $fde5 ;bytes nach oben kopieren
- jsr $fdf5 ;zusatzpuffer nach $0300
-
- ;+++ daten bereitstellen ++++
- jsr $ef41 ;pufferzeiger setzen
- jsr $f008 ;datenpuffer loeschen
- lda #$ff ;2.byte fuer 18,01
- sta $0701 ;sonst egal
-
- lda #$07 ;datenpuffer
- sta $31
- jsr $f5e9 ;pruefsumme ber.
- sta $3a ;merken
-
- jsr $f78f ;daten nach gcr
-
- lda #0 ;zeiger auf akt sektheader
- sta $32
-
- ;+++ einen sektor schreiben (($bc) mal)+++
- :new14 lda #$ff ;sync schreiben
- sta $1c01
- ldx #$05 ;5 mal
- :new7 bvc new7
- clv
- dex
- bne new7
-
- ldx #$0a ;10 headerdaten(gcr)
- ldy $32
- :new8 bvc new8
- clv
- lda $0300,y ;schreiben
- sta $1c01
- iny
- dex
- bne new8
-
- sty $32 ;zeiger auf naech.
- ;header setzen
-
- ldx #$08 ;$55 schreiben
- :new9 bvc new9 ;8 mal
- clv ;als luecke
- lda #$55
- sta $1c01
- dex
- bne new9
-
- lda #$ff ;sync schreiben
- ldx #$05
- :new10 bvc new10
- clv
- sta $1c01
- dex
- bne new10
-
- ldx #$bb ;daten (gcr) schreiben
- :new11 bvc new11 ;erst aus zusatzpuffer
- clv
- lda $0100,x
- sta $1c01
- inx
- bne new11
-
- ldy #$00 ;dann aus normalen puffer
- :new12 bvc new12
- clv
- lda ($30),y
- sta $1c01
- iny
- bne new12
-
- lda #$55 ;$55 als luecke schreiben
- ldx #$08
- :new13 bvc new13
- clv
- sta $1c01
- dex
- bne new13
-
- dec $bc ;sektanz
- bne new14
-
- :new15 bvc new15 ;warten
- clv
- :new16 bvc new16
- clv
-
- jsr $fe00 ;auf lesen schalten
-
- ;+++ track 18 beschreiben +++
- lda $22 ;spur = 18
- cmp #18
- bne new30 ;nein
-
- pha ;spur merken
- lda #$84 ;Kanal-Puffer-Zuordnung
- sta $b4
- jsr $ef41 ;pufferzeiger setzen
- jsr $f008 ;puffer loeschen
- jsr $eeb7 ;bam erzeugen
- lda #$11 ;track 18
- sta $0748 ;als belegt
- lda #$fc ;kennzeichnen
- sta $0749
-
- ldy #idflag-name-1
- :new6 lda name,y ;name,id
- sta $0790,y ;kopieren
- dey
- bpl new6
-
- lda #$41 ;formatkennzeichen
- sta $0702
-
- lda #18 ;track 18
- sta $0e
- lda #0 ;sekt 0
- sta $0f
- cli
- jsr $d58a ;schreiben
- sei
- pla ;spurnr
-
- :new30 cmp $1b ;alle tracks ?
- beq new17 ;ja, dann fertig
-
- jsr stepi ;track nach innen
-
- jmp form ;naechsten track formatieren
-
- :new17 rts
-
- ;--------------------
-
- :name b " "
- b $a0,$a0
- :id b " "
- b $a0,"2a",$a0,$a0,$a0,$a0
- :idflag b 0
- :fend
-
-
-
- ; ENDE
-