* Utility to convert Version 1.00.00 and 1.01.00 to a form
* that is compatible with the new COCO3.
*
* If it assembles correctly the ident is:
*
* Header for: cc3fix
* Module size: $0135 #309
* Module CRC: $BFFE45 (Good)
* Hdr parity: $1C
* Exec. off: $00A1 #161
* Data Size: $00C8 #200
* Edition: $01 #1
* Ty/La At/Rv: $11 $81
* Prog mod, 6809 obj, re-en
* Boot the system normally, run cc3fix, and then do a cobbler
* to a freshly formatted blank disk. This new system disk will
* boot directly on the COCO3 without the memory conflicts that
* would previously cause 1.00.00 and 1.01.00 to crash.
* The new disk will still work correctly on a COCO1 or COCO2,
* but you will lose one 256 byte page of memory.
* Kent D. Meyers. November 4, 1986.
IFP1
USE DEFSFILE
ENDC
MOD SIZE,NAME,PRGRM+OBJCT,REENT+1,ENTRY,MSIZ
ORG 0
RMB 200 stack
MSIZ EQU .
NAME FCS "cc3fix"
FCB 1 edition
OS9NAM FCS 'OS9'
SYSGONAM FCS 'SYSGO'
BADVERSN FCC " Wrong Version of OS9."
FCB $0A
FCC " NO patches made!!"
FCB $0D
PATCHMSG FCC " Already Patched."
FCB $0A
FCC " NO patches made!!"
FCB $0D
GOODMSG FCC " Now Compatible with COCO3!!"
FCB $0A
FCC " OK to run cobbler now!!"
FCB $0D
* Fix memory limit in OS9 module.
ENTRY LEAX OS9NAM,PCR
LDA #$C1
OS9 F$LINK
LDX M$SIZE,U
CMPX #$07E7
BNE WRONGVSN
LEAX $BC,U
LDD #$F0*$100+$EF
CMPA ,X
BNE PATCHED
STB ,X
BSR MVERIFY
* Fix the loader that moves the kernel up into high memory.
LDX #$F049
LDA #$EF
STA ,X
STA $F054-$F049,X
* Fix warm boot setup in the Sysgo module.
* This code may appear a bit strange at first, but I felt that I
* had to take into account the fact that many people have made
* customized sysgo modules. So the code scans through the module
* until it finds the jmp instruction that must be modified.
LEAX SYSGONAM,PCR
LDA #$C1
OS9 F$LINK
PSHS U
SETJMP LDD #$F00C
PSHS A,B
LDA #$7E
FINDJMP CMPA ,U+
BNE FINDJMP
PULS A,B
CMPD ,U
BNE SETJMP
LDA #$EF
STA ,U
PULS U
BSR MVERIFY
* Kill warm reset. It won't work anymore.
LDD #$00FF
STD >$0071
LEAX GOODMSG,PCR
WRITEOUT LDA #2
LDY #80
OS9 I$WRITLN
CLRB
OS9 F$EXIT
WRONGVSN LEAX BADVERSN,PCR
BRA WRITEOUT
PATCHED LEAX PATCHMSG,PCR
BRA WRITEOUT
* MVERIFY by Kevin K. Darling
************************************************
* module verify in memory with CRC update.
*
MVERIFY TFR U,X x is mod address
LDY M$SIZE,X y is mod size
LEAY -3,Y beginning of chksum
TFR Y,D y is byte count
LEAU D,U set u to chksum
LDA #$FF init chksum
STA ,U
STA 1,U
STA 2,U
PSHS U
OS9 F$CRC calc new crc
PULS U
COM ,U+
COM ,U+
COM ,U
RTS
EMOD
SIZE EQU *
END