mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 16:34:07 +00:00
159 lines
2.3 KiB
ArmAsm
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
|