forked from mist64/cbmsrc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
newdsk.src
138 lines (125 loc) · 3.34 KB
/
newdsk.src
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
.messg "new"
.subttl "new"
.page
; new: initialize a disk, disk is
; soft-sectored, bit avail. map,
; dir, & 1st block are all inited
new jsr onedrv
lda fildrv ; set up drive #
bpl n10
lda #badfn ; bad drive # given
jmp cmderr
n10 lda #0
sta nodrv ; clr drive status
sta wpstat ; and write protect status
jsr setlds
ldx #0 ; drv 0
ldy filtbl+1 ; get disk id
cpy cmdsiz ; is this new or clear?
beq n20 ; next if new
lda cmdbuf,y ; format disk
sta dskid,x ; store in proper drive
lda cmdbuf+1,y ; (y=0)
sta dskid+1,x
jsr clrchn ; clear all channels
jsr jintdsk ; init disk
jsr format ; format disk
jsr clrbam ; zero bam
jmp n30
n20 jsr jintdsk ; init disk
jsr initdr ; clear directory only
lda dskver ; use current version #
cmp vernum
beq n30
jmp vnerr ; wrong version #
n30 lda jobnum
tay
asl a
tax
lda dsknam ; set ptr to disk name
sta buftab,x
ldx filtbl
lda #27
jsr trname ; transfer cmd buf to bam
ldy #0
sty dirbuf ; reset lsb
lda dirtrk
sta (dirbuf),y ; directory track
iny
lda #sysdirsec
sta dirst
sta (dirbuf),y ; link to first dir blk
iny
lda vernum
sta dskver
sta (dirbuf),y ; format type
iny
lda #0 ; null
sta (dirbuf),y
ldy #22 ; skip name
lda dskid
sta (dirbuf),y ; set the disk id '3d'
iny
lda dskid+1
sta (dirbuf),y
iny
lda #160 ; shifted space
sta (dirbuf),y
iny
lda dosver
sta (dirbuf),y
iny
lda dskver
sta (dirbuf),y
iny
lda #160 ; shftd space
sta (dirbuf),y
iny
sta (dirbuf),y
iny
lda #0 ; nulls
n32 sta (dirbuf),y ; clr remaining
iny
bne n32
lda #00
jsr settrk ; dirtrk, 00
jsr drtwrt ; write it out
lda #0
sta dirbuf ; lsb reset
tay ; set up 1st dir blk
n34 sta (dirbuf),y
iny
bne n34
iny ; set sector link
lda #$ff
sta (dirbuf),y
lda dirst ; wrt it to dirtrk
jsr settrk
jsr drtwrt
jsr newmap ; build new bam
lda dirtrk
sta track
lda #0
sta sector ; allocate 3 sectors & directory sector
jsr wused ; 0
inc sector
jsr wused ; 1
inc sector
jsr wused ; 2
lda dirst
sta sector
jsr wused ; 3 usually
jsr bamout ; write the bams
jsr initdr ; read it back
jmp endcmd
settrk sta sector
lda dirtrk
sta track
rts
clrbam lda #0
tay
1$ sta bam1,y ; zero
sta bam2,y
iny
bne 1$
rts