Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102a/plmutils/format.s
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

159 lines
2.3 KiB
ArmAsm

*********************************************************
* *
* Disk Formatting Program for CP/M-68K (tm) *
* *
* Copyright Digital Research 1982 *
* *
*********************************************************
*
*
*
prntstr = 9
readbuf = 10
*
seldsk = 9
settrk = 10
setsec = 11
setdma = 12
write = 14
sectran = 16
flush = 21
format = 63
*
.text
*
start: link a6,#0
move.l 8(a6),a0
add #$81,a0
scan: cmpi.b #$20,(a0)+
beq scan
cmpi.b #$61,-(a0)
blt upper
sub #$20,(a0)
upper: cmpi.b #$41,(a0)
blt erxit
cmpi.b #$50,(a0)
bgt erxit
query: move.b (a0),d0
move.b d0,msgdskx
ext.w d0
sub.w #$41,d0
move.w d0,dsk
move.w #prntstr,d0
move.l #msgdsk,d1
trap #2
move.w #readbuf,d0
move.l #buf,d1
trap #2
move.b buf+2,d0
cmpi.b #$59,d0
beq doit
cmpi.b #$79,d0
bne exit
*
doit: clr.l d0
clr.l d1
*
* Select the disk to format
*
move.w #seldsk,d0
move.w dsk,d1
clr.b d2
trap #3
tst.l d0
beq selerx
move.l d0,a0
move.l (a0),xlt
move.l 14(a0),a0
move.w (a0),spt
move.w 8(a0),drm
move.w 14(a0),trk
clr.w sect
clr.w count
*
* Call the format function
*
move.w #format,d0
move.w dsk,d1
trap #3
tst.w d0
bne fmterx
lea buf,a0
move.l #$e5e5e5e5,d0
move.w #31,d1
bloop: move.l d0,(a0)+
dbf d1,bloop
move.w #setdma,d0
move.l #buf,d1
trap #3
*
dloop: move.w count,d0
cmp.w drm,d0
bgt exit
move.w sect,d1
cmp.w spt,d1
blt sok
clr.w sect
add.w #1,trk
sok: move.w #settrk,d0
move.w trk,d1
trap #3
move.w #sectran,d0
move.w sect,d1
move.l xlt,d2
trap #3
move.w d0,d1
move.w #setsec,d0
trap #3
move.w #write,d0
clr.w d1
trap #3
tst.w d0
bne wrterx
add #1,sect
add #1,count
bra dloop
*
exit: move.w #flush,d0
trap #3
unlk a6
rts
*
erxit: move.l #erstr,d1
erx: move.w #prntstr,d0
trap #2
bra exit
*
fmterx: move.l #fmtstr,d1
bra erx
selerx: move.l #selstr,d1
bra erx
wrterx: move.l #wrtstr,d1
bra erx
*
.data
msgdsk: .dc.b 'Do you really want to format disk '
msgdskx:.dc.b 'x ? $'
*
.even
buf: .dc.b 126,0
.ds.b 126
*
xlt: .ds.l 1
spt: .ds.w 1
drm: .ds.w 1
sect: .ds.w 1
trk: .ds.w 1
dsk: .ds.w 1
count: .ds.w 1
*
fmtstr: .dc.b 'Formatting Error',13,10,'$'
erstr: .dc.b 'Error',13,10,'$'
selstr: .dc.b 'Select Error',13,10,'$'
wrtstr: .dc.b 'Write Error',13,10,'$'
*
copyrt: .dc.b 'CP/M-68K(tm), Version 1.1, Copyright 1983, Digital Research'
serial: .dc.b 'XXXX-0000-654321'
*
.end