home *** CD-ROM | disk | FTP | other *** search
-
- *** QuietTD 1.0 ***
- *** Klaus 4.8.94 ***
-
- incdir "work:coding/asm_include/"
- include "devices/trackdisk.i"
-
- push macro
- movem.l \1,-(sp)
- endm
- pull macro
- movem.l (sp)+,\1
- endm
-
- sync = $4489
- dmalen = $2000 ;more than enough
-
- start
- move.l 4.w,a6
- cmp #36,$14(a6) ;version
- blt ende
- lea ioreq,a2
- l0
- lea tdname,a0
- moveq #0,d0 ;unit
- moveq #0,d1 ;flags
- bsr OpenDevice
- tst.l d0
- bne ende
- move.l IO_DEVICE(a2),a3 ;adr.
- bsr CloseDevice
- move.l -28(a3),jmpadr1+2
- move.l -28(a3),jmpadr2+2 ;beginio
-
- move.l 4.w,a6
- move.l #patche-patch,d0
- moveq #1,d1
- jsr -198(a6) ;allocmem
- move.l d0,d2
- beq.s ende
- move.l d0,a1
- lea patch,a0
- move.l #patche-patch,d0
- jsr -624(a6) ;copymem
-
- jsr -132(a6) ;forbid
- move.l d2,-28(a3) ;set patch
- jsr -138(a6) ;permit
-
- ende
- moveq #0,d0
- rts
-
- patch
- push d0-a6
- cmp #CMD_READ,IO_COMMAND(a1)
- bne pe
- tst.l IO_OFFSET(a1) ;block 0 ?
- bne pe
- bsr getmem
- tst.l d2
- beq pe ;out of mem
- move.l d2,a5
- move.l d2,a0
- move.l a1,a4
- moveq #IOSTD_SIZE-1,d0
- 1$
- move.b (a1)+,(a0)+ ;copy io-req
- dbf d0,1$
-
- move.l a4,a1
- move #TD_RAWREAD,IO_COMMAND(a1)
- moveq #1,d0 ;quick
- bset #IOTDB_WORDSYNC,d0
- move.b d0,IO_FLAGS(a1)
- move.l #dmalen,IO_LENGTH(a1)
- lea IOSTD_SIZE(a5),a0
- move.l a0,IO_DATA(a1) ;adr.
- move.l IO_DEVICE(a1),a6
- jmpadr1
- jsr 0.l ;beginio
- move.l a4,a1
- move.l 4.w,a6
- jsr -474(a6) ;waitio
- moveq #0,d0
- move.b IO_ERROR(a4),d0 ;io_error
- cmp.l #TDERR_NoSecHdr,d0
- beq.s pme ;disk not formatted or drive error
-
- lea IOSTD_SIZE(a5),a0
- move #dmalen/4-1,d0
- l1
- cmp.l #$4489552A,(a0)+ ;first long in block
- beq.s pme ;td track -> let it read
- dbf d0,l1
- move.l a5,a0
- move.l a4,a1
- moveq #IOSTD_SIZE-1,d0
- 1$
- move.b (a0)+,(a1)+ ;copy back io-req
- dbf d0,1$
- bsr freemem
-
- move.b #TDERR_NoSecHdr,IO_ERROR(a4)
-
- 2$
- pull d0-a6
- moveq #0,d0 ;roger
- move.b IO_ERROR(a1),d0
- ext d0
- ext.l d0
- rts
-
- pme
- move.l a5,a0
- move.l a4,a1
- moveq #IOSTD_SIZE-1,d0
- 1$
- move.b (a0)+,(a1)+ ;copy back io-req
- dbf d0,1$
- bsr.s freemem ;ioreq + buffer
- pe
- pull d0-a6
- jmpadr2
- jmp 0.l
-
- getmem
- push d0-1/a0-1/a6
- move.l 4.w,a6
- move.l #dmalen+IOSTD_SIZE,d0
- move.l #$10002,d1 ;chip + clear
- jsr -198(a6) ;allocmem
- move.l d0,d2
- pull d0-1/a0-1/a6
- rts
-
- freemem
- push d0-1/a0-1/a6
- move.l 4.w,a6
- move.l #dmalen+IOSTD_SIZE,d0
- move.l a5,a1
- jsr -210(a6) ;freemem
- pull d0-1/a0-1/a6
- rts
-
- patche
-
- *-------
-
- * D0 = Unitnummer
- * D1 = Flags
- * A0 = Devicename
-
- OpenDevice
- push d1-a6
- move.l d0,d2
- move.l d1,d3
- move.l a0,a2
- move.l 4.w,a6
- sub.l a1,a1
- jsr -294(a6) ;findtask
- move.l d0,myport+$10
- lea myport,a1
- move.l d0,$10(a1) ;in port
- jsr -354(a6) ;addport
- move.l d2,d0 ;unit
- move.l d3,d1 ;flags
- move.l a2,a0 ;name
- lea ioreq,a1 ;ioreq
- jsr -444(a6) ;opendevice
- tst.l d0
- beq.s 1$ ;fehler
- move.l d0,d2
- lea myport,a1
- jsr -360(a6) ;remport
- move.l d2,d0
- bra.s 2$
- 1$
- lea ioreq,a1
- move.l #myport,14(a1) ;port eintragen
- 2$
- pull d1-a6
- rts
-
- *-------
-
- CloseDevice
- push d0-a6
- move.l 4.w,a6
- lea ioreq,a1
- jsr -450(a6) ;closedevice
- lea myport,a1
- jsr -360(a6) ;remport
- pull d0-a6
- rts
-
- cnop 0,4
-
- ioreq ds.l IOSTD_SIZE ;ioreq
- myport ds.l 8 ;msgport
- dosbase dc.l 0
-
- tdname dc.b "trackdisk.device",0
- dosname dc.b "dos.library",0
-
- end
-