home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 13
/
AACD13.ISO
/
AACD
/
Games
/
WHDLoad
/
Extra
/
Patcher1.05dev.lha
/
Patcher1.05
/
PARAMQTX
/
paramcarriercommand.asm
< prev
next >
Wrap
Assembly Source File
|
1998-01-14
|
11KB
|
491 lines
;THAT IS A MORE 'HISTORICAL' FIX, USE WHDLOAD OR JST NOW IF YOU INSTALL
;NON-OS GAMES!
;fixed: codeprotection removed
; illegal access to a memoryplace $fcxxxx caused a crash
; on 68030+ (mmu?), moreover it was useless, possibly
; a freezertest
; diskroutines contained dbf-delays, now vbi-synced or
; removed
;This is an example of a formatconversion.
;At first it formats a disk and creates a directory S. (cycle 1)
;Then it gets the data from the original disk. (cycle2)
;These data can be read only index-synchronized with OS1.3.
;Therefore here is a strange decoding routine.
;Then these data will be modified by changes and saved as file.
;A proper startup-sequence will be added. (cycle3)
INCDIR ASM-ONE:INCLUDE2.0/
INCLUDE OWN/Patcher.I
INCLUDE DEVICES/TRACKDISK.I
INCLUDE EXEC/EXEC_LIB.I
INCLUDE EXEC/IO.I
INCLUDE LIBRARIES/DOS_LIB.I
HP MOVEQ.L #20,D0
RTS
DC.L TAB
DC.B 'PTCH'
DC.B '$VER:CARRIER_COMMAND_1.0',0
EVEN
TAB DC.L PCH_INIT,INITROUT
DC.L PCH_FILECOUNT,3
DC.L PCH_ADAPTOR,ADNAME
DC.L PCH_DISKNAME,DISKNAMEARRAY
DC.L PCH_FILENAME,FILENAMEARRAY
DC.L PCH_CHANGES,CHANGESARRAY
DC.L PCH_NAME,PARAMNAME
DC.L PCH_DATALENGTH,LENGTHTABLE
DC.L PCH_SAVEDATA,DATATABLE
DC.L PCH_SPECIAL,SPECIALARRAY
DC.L PCH_STATE,STATEARRAY
DC.L PCH_STATE2,STATEARRAY2
DC.L 0
ADNAME DC.B 'Fixed by Harry.',0
EVEN
PARAMNAME DC.B 'Carrier Command V1.2',0
EVEN
DISKNAMEARRAY DC.L 0 ;no name for formatting a disk
DC.L DISK1NAME ;to save the read data on the
DC.L DISK1NAME ;newly formatted disk
DISK1NAME DC.B 'CarrierCommand',0
EVEN
FILENAMEARRAY DC.L 0 ;no filename needed to format a disk
DC.L FILE2NAME ;filename of the mainprogram
DC.L FILE3NAME ;adding a startup-sequence
FILE2NAME DC.B 'CarrierCommand',0
EVEN
FILE3NAME DC.B 'S/Startup-Sequence',0
EVEN
LENGTHTABLE DC.L $1600 ;just a space of $1600 for personal use
DC.L 360076 ;save-length (theres a customloadingroutine)
DC.L DATA3END-DATA3 ;length of the startup
DATATABLE DC.L 0 ;no unread data to save
DC.L 0 ;no unread data to save
DC.L DATA3 ;startup-sequence to add
DATA3 DC.B 'CarrierCommand',$a
DATA3END
EVEN
CHANGESARRAY DC.L 0 ;no changes to make in cycle 1
DC.L CHANGE2 ;changes to the data read from the original
DC.L 0 ;no changes to make in cycle 3
CHANGE2
DC.B $00,$80,$00,$00,$4C,$00,$00,$03
DC.B $F3,$00,$00,$00,$00,$00,$00,$00
DC.B $02,$00,$00,$00,$00,$00,$00,$00
DC.B $01,$00,$01,$5F,$89,$40,$00,$00
DC.B $01,$00,$00,$03,$E9,$00,$01,$5F
DC.B $89,$4E,$F9,$00,$05,$7D,$28,$46
DC.B $FC,$27,$00,$2E,$7C,$00,$05,$86
DC.B $AA,$4E,$B9,$00,$01,$A0,$EC,$50
DC.B $F8,$12,$0F,$50,$F8,$22,$9C,$31
DC.B $FC,$00,$04,$22,$9E,$4E,$F8,$5F
DC.B $50,$80,$70,$3A,$06,$00,$40,$61
DC.B $00,$04,$06,$80,$70,$D6,$06,$76
DC.B $01,$61,$00,$03,$6A,$00,$70,$DF
DC.B $FA,$80,$71,$6B,$09,$7F,$61,$00
DC.B $02,$D6,$08,$2E,$00,$01,$00,$00
DC.B $71,$75,$1F,$80,$71,$C4,$08,$00
DC.B $10,$61,$00,$02,$7C,$4E,$71,$80
DC.B $74,$26,$08,$30,$3C,$00,$B4,$08
DC.B $39,$00,$00,$80,$74,$2F,$09,$DF
DC.B $F0,$05,$66,$F6,$08,$39,$00,$00
DC.B $00,$80,$74,$39,$1B,$DF,$F0,$05
DC.B $67,$F6,$51,$C8,$FF,$EA,$4E,$75
DC.B $4E,$71,$4E,$71,$08,$39,$00,$00
DC.B $00,$DF,$F0,$05,$66,$F6,$08,$39
DC.B $00,$80,$74,$55,$09,$00,$00,$DF
DC.B $F0,$05,$67,$F6,$4E,$75,$00,$00
DC.B $AE,$80,$00,$00,$AE,$A0,$00,$00
DC.B $AE,$B0,$00,$00,$AE,$C0,$00,$00
DC.B $AE,$E0,$00,$00,$AE,$F0,$00,$00
DC.B $AF,$10,$00,$00,$AF,$20,$00,$00
DC.B $AF,$40,$00,$00,$AF,$50,$00,$00
DC.B $AF,$60,$00,$00,$C7,$C3,$18,$80
DC.B $C7,$C8,$04,$12,$C1,$4E,$71,$81
DC.B $9D,$52,$0C,$4E,$71,$4E,$71,$4E
DC.B $71,$4E,$71,$4E,$71,$4E,$71,$81
DC.B $A5,$AC,$08,$4E,$B9,$00,$00,$77
DC.B $F8,$4E,$71,$85,$7D,$4C,$02,$2C
DC.B $78,$85,$7D,$4F,$03,$04,$43,$FA
DC.B $00,$85,$7D,$53,$02,$6A,$70,$85
DC.B $7D,$56,$06,$4E,$AE,$FD,$D8,$23
DC.B $C0,$85,$7D,$5D,$04,$05,$7D,$AA
DC.B $67,$85,$7D,$63,$05,$3E,$61,$6C
DC.B $2C,$78,$00,$85,$7D,$69,$08,$04
DC.B $4E,$AE,$FF,$6A,$46,$FC,$27,$85
DC.B $7D,$72,$03,$4F,$F8,$01,$00,$85
DC.B $7D,$76,$FF,$33,$FC,$7F,$FF,$00
DC.B $DF,$F0,$9A,$33,$FC,$7F,$FF,$00
DC.B $DF,$F0,$96,$41,$F9,$00,$00,$00
DC.B $06,$43,$F8,$03,$DE,$20,$3C,$00
DC.B $01,$5F,$49,$22,$D8,$53,$80,$66
DC.B $FA,$4E,$F8,$03,$DE,$4A,$B9,$00
DC.B $05,$7D,$AA,$67,$0C,$2C,$78,$00
DC.B $04,$22,$7A,$00,$20,$4E,$AE,$FE
DC.B $62,$70,$14,$4E,$75,$00,$00,$00
DC.B $00,$67,$72,$61,$70,$68,$69,$63
DC.B $73,$2E,$6C,$69,$62,$72,$61,$72
DC.B $79,$00,$00,$00,$00,$00,$00,$2C
DC.B $7A,$FF,$FA,$23,$EE,$00,$22,$00
DC.B $05,$7D,$94,$32,$7C,$00,$00,$4E
DC.B $AE,$FF,$22,$4E,$AE,$FE,$F2,$4E
DC.B $AE,$FE,$F2,$41,$F9,$00,$00,$00
DC.B $00,$23,$C8,$00,$DF,$F0,$80,$30
DC.B $39,$00,$DF,$F0,$04,$02,$40,$00
DC.B $01,$67,$F4,$30,$39,$00,$DF,$F0
DC.B $04,$02,$40,$00,$01,$66,$F4,$30
DC.B $39,$00,$DF,$F0,$04,$02,$40,$00
DC.B $01,$67,$F4,$30,$39,$00,$DF,$F0
DC.B $04,$02,$40,$00,$01,$66,$F4,$30
DC.B $39,$00,$DF,$F0,$7C,$0C,$00,$00
DC.B $F8,$66,$10,$33,$FC,$00,$00,$00
DC.B $DF,$F1,$FC,$33,$FC,$0C,$01,$00
DC.B $DF,$F1,$06,$4E,$75,$00,$00,$03
DC.B $EC,$00,$00,$00,$05,$00,$00,$00
DC.B $00,$00,$00,$00,$02,$00,$05,$7D
DC.B $38,$00,$05,$7D,$64,$00,$05,$7D
DC.B $7E,$00,$05,$7D,$B6,$00,$00,$00
DC.B $01,$00,$00,$00,$01,$00,$05,$7D
DC.B $CC,$00,$00,$85,$7E,$75,$17,$00
DC.B $00,$00,$00,$00,$03,$F2,$00,$00
DC.B $03,$EA,$00,$00,$00,$01,$FF,$FF
DC.B $FF,$FE,$00,$00,$03,$F2,$00,$40
DC.B $00,$00
EVEN
;the parameter-initializing opens source- and destinationdevice,
;both are needed
INITROUT MOVEQ.L #0,D0
MOVE.L PTB_OPENDEVICE(A5),A0
JSR (A0)
TST.L D0
BEQ.S .1
RTS
.1 MOVEQ.L #1,D0
MOVE.L PTB_OPENDEVICE(A5),A0
JSR (A0)
RTS
;loading-statetexts for the cycles
STATEARRAY DC.L FORMATSTATE1 ;i programmed the formatting in the
;loading-routine and i'm to lazy to change that
DC.L LOADSTATE2
DC.L SAVESTATE
FORMATSTATE1
DC.B 'Please insert an empty dd-disk',$a
DC.B 'in your destination drive.',0
EVEN
LOADSTATE2
DC.B 'Please insert your original writepro-',$A
DC.B 'tected disk in the source drive.',0
EVEN
STATEARRAY2 DC.L 0 ;no text in cycle 1
DC.L SAVESTATE
DC.L SAVESTATE
SAVESTATE
DC.B 'Please insert your destination disk.',0
EVEN
;routines to 'load' something
SPECIALARRAY DC.L FORMAT ;more correctly this would be put to
;PCH_SAVEPGM, but i'm to lazy
DC.L LOADROUT ;load stuff from original
DC.L 0 ;nothing special in cycle 3
FORMAT
MOVEQ.L #0,D0 ;format dd-disk in destination-drive
LEA.L DISK1NAME(PC),A0
MOVE.L PTB_FORMATDEST(A5),A1
JSR (A1)
TST.L D0
BEQ.S .1
.ERR MOVEQ.L #-1,D0
RTS
.1 MOVE.L #DIRNAME,D1 ;and create a 's'-drawer
MOVE.L PTB_DOSBASE(A5),A6
JSR _LVOCREATEDIR(A6)
TST.L D0
BEQ.S .ERR
MOVE.L D0,D1
JSR _LVOUNLOCK(A6)
MOVEQ.L #0,D0
RTS
DIRNAME DC.B 'CarrierCommand:S',0
EVEN
LOADROUT
MOVEQ.L #0,D7 ;one diskchange allowed
.NEU
.4 MOVE.L PTB_DEVICESOURCEPTR(A5),A1 ;disk in sourcedrive?
MOVE.W #TD_CHANGESTATE,IO_COMMAND(A1)
MOVE.L (_SYSBASE).W,A6
JSR _LVODOIO(A6)
TST.L IO_ACTUAL(A1)
BNE.W .NOTCC
MOVE.L PTB_ADDRESSOFFILE(A5),A4 ;load first part of disk
LEA.L $4C(A4),A2 ;offset to load in the dataspace
MOVE.L #$9,D2 ;starttrack on the disk
MOVE.L #$50000,D3 ;$50000 bytes to read
MOVEQ.L #0,D4 ;data from the start of the track
; bra.s .5 ;because reading starts with
;trackstart, this is obsolete
.3 TST.L D4
BNE.S .1
.5 MOVEQ.L #$4,D6 ;4 tries, then error
.55 MOVE.L PTB_DEVICESOURCEPTR(A5),A1
MOVE.L PTB_SPACE(A5),IO_DATA(A1) ;track is to load in PTB_SPACE
MOVE.L #$7FFE,IO_LENGTH(A1) ;double length of track
;to decode the index-sync-read data
MOVE.L D2,D0 ;my own trackcounter
ADD.L D0,D0 ;original is one-sided
MOVE.L D0,IO_OFFSET(A1)
MOVE.W #TD_RAWREAD,IO_COMMAND(A1)
MOVE.B #IOTDB_INDEXSYNC,IO_FLAGS(A1)
MOVE.L (_SYSBASE).W,A6
JSR _LVODOIO(A6)
TST.L D0
BNE.W .ERR
MOVE.L PTB_SPACE(A5),A0
LEA.L $7FFE(A0),A1 ;end of buffer
LEA.L $7FFE(A0),A3
BSR.W TRACKDECODE
TST.L D0
BEQ.S .R1OK
DBF D6,.55
BRA.W .NOTCC
.R1OK ADDQ.L #1,D2
ST D7 ;correct disk - nothing anymore
;to change
.1 MOVE.B (A3)+,(A2)+
ADDQ.L #1,D4
CMP.L #$1400,D4 ;tracklength
BNE.S .2
MOVEQ.L #0,D4 ;new track
.2 SUBQ.L #1,D3
BNE.S .3
LEA.L (A4),A2
ADDA.L #$4FFB4+$22,A2 ;second part to read from the
MOVE.L #$2,D2 ;original
MOVE.L #32160,D3
MOVEQ.L #0,D4
.13 TST.L D4
BNE.S .11
MOVEQ.L #$4,D6
.REP MOVE.L PTB_DEVICESOURCEPTR(A5),A1
MOVE.L PTB_SPACE(A5),IO_DATA(A1)
MOVE.L #$7FFE,IO_LENGTH(A1)
MOVE.L D2,D0
ADD.L D0,D0
MOVE.L D0,IO_OFFSET(A1)
MOVE.W #TD_RAWREAD,IO_COMMAND(A1)
MOVE.B #IOTDB_INDEXSYNC,IO_FLAGS(A1)
MOVE.L (_SYSBASE).W,A6
JSR _LVODOIO(A6)
TST.L D0
BNE.S .ERR
MOVE.L PTB_SPACE(A5),A0
LEA.L $7FFE(A0),A1
LEA.L $7FFE(A0),A3
BSR.W TRACKDECODE
TST.L D0
BEQ.S .R2OK
DBF D6,.REP
BRA.S .ERR
.R2OK ADDQ.L #1,D2
.11 MOVE.B (A3)+,(A2)+
ADDQ.L #1,D4
CMP.L #$1400,D4
BNE.S .12
MOVEQ.L #0,D4
.12 SUBQ.L #1,D3
BNE.S .13
MOVEQ.L #0,D4
.END MOVE.L PTB_DEVICESOURCEPTR(A5),A1 ;switch motor off
MOVE.L #0,IO_LENGTH(A1)
MOVE.W #TD_MOTOR,IO_COMMAND(A1)
MOVE.L (_SYSBASE).W,A6
JSR _LVODOIO(A6)
MOVE.L D4,D0
RTS
.ERR MOVEQ.L #-1,D4
BRA.S .END
.NOTCC TST.L D7 ;if the first time the original
BNE.S .ERR ;was not in the source drive,
ST D7 ;youll be asked to put it there
LEA.L LINE1(PC),A0
LEA.L LINE2(PC),A1
MOVE.L PTB_REQUEST(A5),A6
JSR (A6)
TST.L D0
BNE.S .ERR
BRA.W .NEU
LINE1 DC.B 'Please insert your original',0
EVEN
LINE2 DC.B 'in the source drive.',0
EVEN
;< A0 RAWTRACK
;< A1 TRACKBUFFER
;> D0 ERROR
TRACKDECODE MOVEM.L A2/A3/D2/D3/D4/D5/D6,-(A7)
MOVE.L A0,A2
MOVE.L A1,A3
MOVE.W #$4489,-2(A3) ;sync has to be searched with shifting
MOVE.L #$55555555,D3 ;the data
.SHF2 MOVEQ.L #$10-1,D5
.SHF1 MOVE.L (A2),D0
LSR.L D5,D0
CMP.W #$4489,D0
BEQ.S .SY
DBF D5,.SHF1
ADDQ.L #2,A2
BRA.S .SHF2
.SY MOVE.L (A2),D0
ADDQ.L #2,A2
LSR.L D5,D0 ;d5 is the shifting-number when sync was found
CMP.W #$4489,D0
BNE.S .SY
.1 MOVE.L (A2),D0
ADDQ.L #2,A2
LSR.L D5,D0
CMP.W #$4489,D0
BEQ.S .1
CMP.L A2,A3
BLS .ERR
SUBQ.W #2,A2
LEA.L 8(A2),A0
BSR.S .DC1L
MOVE.L D0,D4
LEA.L $10(A2),A0
MOVE.W #$2800,D1
BSR.S .CHKSUM
CMP.L D0,D4
BNE.S .ERR
LEA.L $10(A2),A0
MOVE.W #$1400,D0
BSR.W .DC
MOVEM.L (A7)+,A2/A3/D2/D3/D4/D5/D6
MOVEQ #0,D0
RTS
.ERR MOVEM.L (A7)+,A2/A3/D2/D3/D4/D5/D6
MOVEQ #-1,D0
RTS
.CHKSUM LSR.W #2,D1
MOVE.L (A0)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A0),D0
LSR.L D5,D0
AND.L #$FFFF,D0
OR.L D6,D0
SUBQ.W #2,D1
.CHK1 MOVE.L (A0)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A0),D2
LSR.L D5,D2
AND.L #$FFFF,D2
OR.L D6,D2
EOR.L D2,D0
DBF D1,.CHK1
AND.L D3,D0
RTS
.DC1L MOVE.L (A0)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A0),D0
LSR.L D5,D0
AND.L #$FFFF,D0
OR.L D6,D0
MOVE.L (A0)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A0),D1
LSR.L D5,D1
AND.L #$FFFF,D1
OR.L D6,D1
AND.L D3,D0
AND.L D3,D1
ADD.L D0,D0
OR.L D1,D0
RTS
.DC LEA.L (A0,D0.W),A1
LSR.W #2,D0
SUBQ.W #1,D0
.DC1 MOVE.L (A0)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A0),D1
LSR.L D5,D1
AND.L #$FFFF,D1
OR.L D6,D1
MOVE.L (A1)+,D6
LSR.L D5,D6
SWAP D6
CLR.W D6
MOVE.L -2(A1),D2
LSR.L D5,D2
AND.L #$FFFF,D2
OR.L D6,D2
AND.L D3,D1
AND.L D3,D2
ADD.L D1,D1
OR.L D2,D1
MOVE.L D1,(A3)+
DBF D0,.DC1
RTS