home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Domination 17
/
Domination_17_2002-11_-_Side_A_Bonus_Disk.d64
/
hdpark-sw.source
< prev
next >
Wrap
Text File
|
2023-02-26
|
5KB
|
133 lines
; hd-pARK-sWITCH v1.0 BY nINJA/tHE dREAMS IN 2002
ORG $0801
BINCLUDE "HELP\HDPSHEAD.PRG",2
; INCLUDE basic-HEADER, WHICH CONTAINS SOME INFORMATION AND
; WILL START THE FOLLOWING ROUTINE. wORKS IN 64 AND 128-MODE!
ALIGN 256 ; START AT BEGINNING OF A PAGE
JMP_IN:
LDA #$0F ; CHANNEL #15
LDX $BA ; USE CURRENT DEVICE
TAY ; USE COMMAND CHANNEL
JSR $FFBA ; SET FILE-PARAMETERS
LDA $FFF6
CMP #$FF ; CHECK PLATFORM
BNE C64_FOUND ; c64, THEN JUMP
LDA #$0F
TAX ; SET MEM-CONFIG FOR CHANNEL
JSR $FF68 ; IN c128-MODE
LDY $2E ; GET c128-basic-START
BYT $2C ; SKIP NEXT OPCODE
C64_FOUND:
LDY $2C ; GET c64-basic-START
INY ; INCREMENT TO POINT TO THIS PAGE
LDX #LO(MW_COMMAND) ; LOBYTE OF COMMAND
LDA #HD_CODE_LEN+6 ; WE SEND ALL BYTES AT ONCE
JSR $FFBD ; SET UP MEMORY-WRITE-COMMAND
JSR $FFC0 ; SEND COMMAND
LDX #$0F
JSR $FFC6 ; SET CHANNEL AS INPUT
JSR $FFCF ; GET CHAR
CMP #'0' ; "0" FROM ok-STRING?
BNE DRIVE_ERR ; IF NOT, SKIP EXECUTION (WILL BE PROBABLY
; A NON cmd-hd-DRIVE COMPLAINING ABOUT THE
; TOO LONG COMMAND STRING)
LDX #$0F
JSR $FFC9 ; CHANNEL AS OUTPUT
LDA #'u'
JSR $FFD2
LDA #'3'
JSR $FFD2 ; SEND "u3", EXECUTES AT $0500
DRIVE_ERR:
JSR $FFCC ; RESTORE INPUT/OUTPUT
LDA #$0F
JMP $FFC3 ; CLOSE CHANNEL AND GO BACK
; ------------------------------------------------------------------------
MW_COMMAND:
BYT "m-w",0,5,HD_CODE_LEN
HD_CODE:
PHASE $0500 ; hd-cODE IS AT $0500
SEI ; NO INTERRUPTS
LDY #2 ; CHECK 3 rom VERSIONS (1.86, 1.90, 1.92)
NEXT_ROM:
LDX ROM_OFS,Y ; GET VERSION-SPECIFIC OFFSET INTO X
LDA #$4C ; $4C = jmp OPCODE
CMP $F28A,X ; PRESENT IN rom?
BNE WRONG_ROM ; NO, THEN NEXT VERSION
LDA ROM_JMPLO,Y ; GET VERSION-SPECIFIC ADDRESS_LO
CMP $F28B,X ; PRESENT IN rom?
BNE WRONG_ROM ; NO, THEN NEXT VERSION
STA BP_MOD+1 ; STORE ADDRESS_LO INTO OUR BACKPACK
LDA ROM_JMPHI,Y ; GET VERSION-SPECIFIC ADDRESS_HI
CMP $F28C,X ; PRESENT IN rom?
BEQ ROM_FOUND ; YES, THEN GO PATCHING
WRONG_ROM:
DEY ; TRY NEXT VERSION
BPL NEXT_ROM ; STILL ONE LEFT?
CLI
RTS ; NO, THEN GOODBYE WITHOUT CHANGES
ROM_FOUND:
STA BP_MOD+2 ; STORE ADDRESS_HI INTO OUR BACKPACK
LDA $8F00
ORA #$20
STA $8F00 ; UNPROTECT ram
LDY #BP_LEN-1
COPY_BP:
LDA BACKPACK,Y
STA $FF60,Y
DEY
BPL COPY_BP ; COPY BACKPACK TO $ff60
LDA #$60
STA $F28B,X
LDA #$FF ; APPLY jmp $ff60 TO VERSION-SPECIFIC
STA $F28C,X ; ADDRESS
LDA $8F00
AND #$DF
STA $8F00 ; PROTECT ram
CLI
RTS ; GOODBYE
; ------------------------------------------------------------------------
BACKPACK:
LDA #$F8 ; scsi-jOBCODE 'sTART dEVICE'
BIT $49 ; cHECK FOR 'wRITE pROTECT'
BPL WP_DISABLED ; DISABLED, THEN SKIP NEXT OPCODE
LDA #$FA ; scsi-jOBCODE 'sTOP dEVICE'
WP_DISABLED:
STA $20 ; INTO nATIVE-jOB-qUEUE
BP_MOD: JMP $ffff ; BACK TO ORIGINAL ROUTINE
; SELF-MODIFIED FROM ABOVE
BP_LEN = *-BACKPACK
; ------------------------------------------------------------------------
; v1.86 v1.90 v1.92
ROM_OFS: BYT $F28A-$F28A , $F2F6-$F28A , $F331-$F28A
; WHERE TO PATCH
ROM_JMPLO: BYT $BE , $2A , $65
ROM_JMPHI: BYT $F2 , $F3 , $F3
; WHAT TO PATCH
DEPHASE
HD_CODE_LEN = *-HD_CODE
END $0801