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 >
Wrap
Text File
|
2022-10-26
|
12KB
|
609 lines
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