Voir le sujet pr�c�dent :: Voir le sujet suivant |
Auteur |
Message |
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Sam 23 Juin 2007, 23:17 Sujet du message: Gamma Goblins (Sirius Software, 1981) |
|
|
Another wonderful game from Sirius Software. Fight the ennemies and kill the evil Dr. Ngo!
DISK STRUCTURE
It is a non-standard disk, only T0/S0 can be copied! Each track contains the equivalent of thirteen sectors with markers DD AD DA followed by thirteen 512 4*4 coded nibbles.
Last but not least, the first track is track 1.5
BOOT TRACE
Sirius games are actively protected against boot tracing. That is quite mandatory as, once loaded, there are no more calls to the disk, meaning all the program is loaded into memory!
- 9600<C600.C6FFM
- 96FB: AD E8 C0 60
- 9600G
Bing! At $0801, the program loads 1024 bytes from $0400 to $07FF, clears memory, EORs ZP and then jumps to the next boot stage at $0400
Let's get the code:
- 96FB: A9 14 8D 10 08 A9 18 8D 4C 08 A9 00 8D 4F 08 4C 01 08
- 9600G
Bing! We now have the $0400..$07FF code at $1400..$17FF.
We have another ZP eoring, the setting of the reset vector, another EOR and several other interesting code:
- all nibbles read are stored at $0600..$07FF, that explains the garbage on the GR screen
- moving to a specific track to put $40 bytes at $0200
- moving to a specific track to get four values saved at $4E, $4F and the two others in the stack!
The data at $0200 contains a short routine and a value that is read to activate the HGR display!
I will not go into the details of getting them, what I have done is reassemble that code at $A400, execute it and save the results in the ZP. The values you get are:
- $4E <= read value is $AA, then EOR with value $A3, save at $4E --> $09
- $4F <= read value is $EE, then EOR with value $EC, save at $4F --> $02
- PHA <= read value is $BB, then EOR with value $34, put in stack --> $8F
- PHA <= read value is $FF, then EOR with value $40, put in stack --> $BF
In another message, all of the different codes will be shown.
MEMORY ORGANIZATION
- T0/S0 - $0800..$08FF
- T0/S1..4 - $0400..$07FF
- T1.5 - $0800..$13FF
- T2.5 - $1400..$1FFF
- T3.5 - $4000..$4BFF
- T4.5 - $4C00..$57FF
- T5.5 - $5800..$63FF
- T6.5 - $6400..$6FFF
- T7.5 - $7000..$7BFF
- T8.5 - $7C00..$87FF
- T9.5 - $8800..$93FF
- TA.5 - $9400..$9FFF
- TB.5 - $0200..$023F
- TD - $4E, $4F, PHA, PHA
DISK COPY
You now have all the information to get the complete game and create a DOS binary file. As always, I believe it is better to rewrite the read routines
We will have to change some false opcodes as it prevents the game from being played on a IIgs!
That's all folks. You have all the useful information to make a backup of it
Toinet
Derni�re �dition par toinet le Ven 28 Sep 2007, 9:48; �dit� 2 fois |
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 29 Juin 2007, 12:46 Sujet du message: |
|
|
Voici la routine du boot1 :
Code: | *
* GAMMA GOBLINS
* BOOT1 - $0800
*
* LoGo - 2007
*
TXTCLR EQU $C050
MIXCLR EQU $C052
TXTPAGE1 EQU $C054
LORES EQU $C056
TYP BIN
ORG $000800
MX %11
HEX 01
STA TXTCLR
STA MIXCLR
STA TXTPAGE1
STA LORES
LDX $2B
LDA #$04 ; LOAD AT $400
STA $11
LDY #$00
STY $10
L0817 LDA $C08C,X ; MARKER $DD $AD $DA
BPL L0817
L081C CMP #$DD
BNE L0817
L0820 LDA $C08C,X
BPL L0820
CMP #$AD
BNE L081C
L0829 LDA $C08C,X
BPL L0829
CMP #$DA
BNE L081C
L0832 LDA $C08C,X ; READ MASK VALUE
BPL L0832
SEC ; SET CARRY
ROL ; BIT 0 ALWAYS 1
STA $0E
L083B LDA $C08C,X ; READ DATA VALUE
BPL L083B
AND $0E
STA ($10),Y ; STORE RESULT
INY
BNE L0832
INC $11
LDA $11
CMP #$08 ; LOAD END AT $7FF
BNE L0832
LDA $C080,X ; PHASE 0 OFF
LDA #$09 ; CLEAR MEMORY
STA $01 ; FROM $0900
LDA #$00 ; FOR $88 PAGES
STA $00
TAY
LDX #$88
L085D STA ($00),Y
INY
BNE L085D
INC $01
DEX
BNE L085D
TXA ; A CONTAINS 0
L0868 EOR $00,X ; EOR ZERO PAGE
INX
BNE L0868
LDX $2B
JMP $0400 ; NEXT STAGE...
DS $8E |
Derni�re �dition par toinet le Ven 28 Sep 2007, 9:47; �dit� 1 fois |
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 29 Juin 2007, 12:47 Sujet du message: |
|
|
Voici la routine du boot2 en $0400 :
Code: |
*
* GAMMA GOBLINS
* BOOT2 - $0400
*
* LoGo - 2007
*
L0200 EQU $0200
SOFTEV EQU $03F2
PWREDUP EQU $03F4
SPKR EQU $C030
TXTPAGE2 EQU $C055
ROMIN2 EQU $C081
RDROM2 EQU $C082
INIT EQU $FB2F
WAIT EQU $FCA8
RESETV EQU $FFFC
TYP BIN
ORG $000400
MX %11
L0400 JSR L05C6 ; SOME INITS
LDA #$74 ; REDIRECT VECTOR
STA $36
LDA #$05
STA $37
LDA #$00
STA $0C ; $0C: CURRENT PHASE
STA $0F ; $0F: INDEX OF DATA TO LOAD
LDY #$03 ; MOVE +3 PHASES (TRACK 1.5)
JSR L0482
L0416 LDY $0F
LDA L0428,Y ; WHERE TO LOAD DATA
BEQ L047C
JSR L0434 ; READ DATA FROM DISK
JSR L0480 ; MOVE TO NEXT TRACK
INC $0F
JMP L0416
L0428 HEX 0814404C5864707C889400
HEX 00
*
* $0800 - TRACK 1.5
* $1400 - TRACK 2.5
* $4000 - TRACK 3.5
* $4C00 - TRACK 4.5
* $5800 - TRACK 5.5
* $6400 - TRACK 6.5
* $7000 - TRACK 7.5
* $7C00 - TRACK 8.5
* $8800 - TRACK 9.5
* $9400 - TRACK A.5
*
*
* READ DATA FROM DISK
*
L0434 STA $05 ; READ $C00 DATA ON CURRENT TRACK
CLC
LDA #$0C ; $06: NBR OF PAGES TO LOAD
STA $06
LDY #$00 ; $04.$05: WHERE TO LOAD DATA
STY $04
L043F LDA $C08C,X ; MARKER $DD
BPL L043F
L0444 CMP #$DD
BNE L043F
L0448 LDA $C08C,X ; MARKER $AD
BPL L0448
CMP #$AD
BNE L0444
L0451 LDA $C08C,X ; MARKER $DA
BPL L0451
CMP #$DA
BNE L0444
L045A LDA $C08C,X ; READ MASK VALUE
BPL L045A
STA L0600,Y ; SAVE IN $600
SEC ; SET CARRY
ROL ; BIT 0 ALWAYS 1
STA L0700,Y ; SAVE FINAL MASK
STA $0E
L0469 LDA $C08C,X ; READ DATA VALUE
BPL L0469
AND $0E
STA ($04),Y ; SAVE FINAL VALUE
INY
BNE L045A
INC $05
DEC $06 ; NEXT PAGE
BNE L045A
RTS
L047C JMP L04A8 ; NEXT STAGE...
HEX 00
*
* SEEK
*
L0480 LDY #$02 ; SEEK TRACK (2 PHASES)
L0482 STX $0D ; SEEK
L0484 INC $0C
LDA $0C
AND #$03
ASL
ORA $0D
TAX
LDA $C081,X
JSR L04A0
LDA $C080,X
JSR L04A0
DEY
BNE L0484
LDX $0D
RTS
L04A0 LDA #$40 ; WAIT UNTIL ARM MOVED
JMP WAIT
HEX 00
HEX 00
HEX 00
*
* NEXT LOAD STAGE
* ARM IS ON TRACK B.5 (11.5)
*
L04A8 LDA $C08C,X ; READ DATA FROM DRIVE
BPL L04A8 ; MIGHT BE USED AFTERWARDS
CMP #$FF ; MARKER FF
BNE L04A8
L04B1 LDA $C08C,X
BPL L04B1
CMP #$FF ; MARKER FF
BNE L04A8
L04BA LDA $C08C,X
BPL L04BA
CMP #$AA ; MARKER AA
BNE L04A8
L04C3 LDA $C08C,X
BPL L04C3
CMP #$AA ; MARKER AA
BNE L04A8
LDY #$00
L04CE LDA $C08C,X ; READ MASK VALUE
BPL L04CE
SEC ; SET CARRY
ROL ; BIT 0 ALWAYS 1
STA $0E
L04D7 LDA $C08C,X ; READ DATA VALUE
BPL L04D7
AND $0E
STA L0200,Y
INY
CPY #$40 ; READ 64 VALUES
BNE L04CE
LDY #$03 ; MOVE +3 PHASES
JSR L0482 ; WE ARE ON TRACK $D (13)
LDA #$08 ; WAIT A LITTLE BIT
JSR WAIT
L04F0 LDA $C08C,X
BPL L04F0
CMP #$D5 ; MARKER D5
BNE L04F0
L04F9 LDA $C08C,X
BPL L04F9
EOR #$A3 ; READ/EOR/SAVE
STA $4E
L0502 LDA $C08C,X
BPL L0502
EOR #$EC ; READ/EOR/SAVE
STA $4F
L050B LDA $C08C,X
BPL L050B
EOR #$34 ; READ/EOR/PUSH
PHA ; RETURN ADDRESS
L0513 LDA $C08C,X
BPL L0513
EOR #$40 ; READ/EOR/PUSH
PHA ; RETURN ADDRESS
LDA $C088,X ; STOP DRIVE
LDA #$08 ; EOR DATA FROM $800
STA $01 ; FOR $92 PAGES
LDY #$00
STY $00
LDX #$92
TYA
L0529 EOR ($00),Y
INY
BNE L0529
INC $01
DEX
BNE L0529
TAY
BNE L0578
LDA #$74 ; REDIRECT VECTOR
STA $38
LDA #$05
STA $39
TSX ; MOVE STACK POINTER TO X !
RTS ; GO TO VALUES ON STACK
L0540 LDA ROMIN2 ; CLEAR ROM DATA
LDA ROMIN2 ; FROM $D000
LDY #$00 ; TO $FFFF
STY $00
LDA #$D0
STA $01
L054E LDA ($00),Y
STA ($00),Y
INY
BNE L054E
INC $01
BNE L054E
LDA #$88 ; RESET VECTOR
STA RESETV
LDA #$05
STA RESETV+1
LDA RDROM2
RTS ; RETURN TO $403
HEX 8899AABBCCDDEEFF
HEX 00
LDA #$00 ; ERROR MESSAGES
BEQ L0580
L0574 LDA #$01
BNE L0580
L0578 LDA #$02
BNE L0580
LDA #$04
BNE L0580
L0580 ORA #$B0
STA $0800
JSR INIT
LDA TXTPAGE2
LDA #$08 ; FILL MEMORY WITH $A0
STA $01 ; FROM $0800
LDY #$01 ; $BFFF
STY $00
LDX #$B8
LDA #$A0
L0597 STA ($00),Y
INY
BNE L0597
INC $01
DEX
BNE L0597
LDA #$08 ; BEEP
STA $00
L05A5 LDY #$80
L05A7 LDA SPKR
TYA
L05AB SEC
SBC #$01
BNE L05AB
DEY
BNE L05A7
DEC $00
BNE L05A5
LDX $0D ; REBOOT
DEX
TXA
LSR
LSR
LSR
LSR
ORA #$C0
PHA
LDA #$FF
PHA
RTS
L05C6 LDY #$00 ; EOR ZERO PAGE
L05C8 EOR |$0000,Y
INY
BNE L05C8
TAY ; VALUE GOT FROM BOOT0 (SHOULD BE 0)
BNE L0574
LDA #$70 ; RESET VECTOR
STA SOFTEV
LDA #$05
STA SOFTEV+1
EOR #$A5
STA PWREDUP
JMP L0540 ; NEXT STAGE...
L05E3 HEX 33445566778899AABBCCDDEEFF112233
HEX 445566778899AABBCCDDEEFF00
L0600 HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
L0700 HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
|
Derni�re �dition par toinet le Ven 28 Sep 2007, 9:47; �dit� 1 fois |
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Jeu 27 Sep 2007, 21:04 Sujet du message: |
|
|
Gamma Goblins is now fully-cracked and works like a charm on my IIgs The complete protection removal will be written tomorrow.
You know what? I am happy...
antoine |
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 28 Sep 2007, 9:50 Sujet du message: |
|
|
My modified boot 1 code at $0800 :
Code: |
*
* SIRIUS: GAMMA GOBLINS
*
org $0800
mx %11
lst off
*
* Assume SLOT 6 !
* Really optimized !
* Maybe too much...
*
dpBUF = $00
dpNIBBLE = $0E
dpBUFFER = $10
dpSLOT = $2B
dpSECTOR = $3D
dpBYTE = $40
dpTRACK = $41
L0300 = $0300
L0356 = $0356
L0400 = $0400
L0900 = $0900
TXTCLR EQU $C050
MIXCLR EQU $C052
TXTPAGE1 EQU $C054
LORES EQU $C056
*
*
*
HEX 01
L0800 STA TXTCLR ; GR mode
STA MIXCLR
STA TXTPAGE1
STA LORES
LDA #<L0400
STA dpBUFFER
LDA #>L0400
STA dpBUFFER+1
lda #0
sta dpTRACK
* Read header
mainLOOP ldx dpTRACK
lda INTER,x
sta dpSECTOR
readHEADER CLC
readDATA PHP
read1 LDA $C0EC
BPL *-3
read2 EOR #$D5
BNE read1
LDA $C0EC
BPL *-3
CMP #$AA
BNE read2
LDA $C0EC
BPL *-3
CMP #$96
BEQ doHEADER
PLP
BCC readHEADER
EOR #$AD
BEQ doDATA
BNE readHEADER
* Read header
doHEADER LDY #$03
]lp STA dpBYTE
LDA $C0EC
BPL *-3
ROL
STA dpNIBBLE
LDA $C0EC
BPL *-3
AND dpNIBBLE
DEY
BNE ]lp
PLP
CMP dpSECTOR ; Right sector ?
BNE readHEADER
BCS readDATA
* Read data
doDATA LDY #$56
]lp LDX $C0EC
BPL *-3
EOR L0356-$80,X
DEY
STA L0300,Y
BNE ]lp
]lp LDX $C0EC ; Y equals 0 ;-)
BPL *-3
EOR L0356-$80,X
STA (dpBUFFER),Y
INY
BNE ]lp
LDX $C0EC ; checksum
BPL *-3
EOR L0356-$80,X
BNE readHEADER
* Deniblize
doNIBBLE1 LDX #$56 ; Y equals 0 ;-)
doNIBBLE2 DEX
BMI doNIBBLE1
LDA (dpBUFFER),Y
LSR L0300,X
ROL
LSR L0300,X
ROL
STA (dpBUFFER),Y
INY
BNE doNIBBLE2
* Next sector
inc dpTRACK ; next sector
inc dpBUFFER+1 ; next buffer
lda dpBUFFER+1
cmp #>L0800
beq doNEXT
jmp mainLOOP
*
doNEXT LDA $C0E0 ; Remember what Apple said
LDA #>L0900 ; Clear RAM
STA dpBUF+1
LDA #<L0900
STA dpBUF
TAY
LDX #$88
L085D STA (dpBUF),Y
INY
BNE L085D
INC dpBUF+1
DEX
BNE L085D
JMP L0400 ; Boot 2...
*
INTER HEX 0D0B0907
ds 22
SIGNATURE HEX 20204C4F474F2020
HEX 2020323030372020
ds \
|
|
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 28 Sep 2007, 9:53 Sujet du message: |
|
|
My modified boot 2 at $0400. Please note that I load one more track at $A000 to put the right data at the right place.
The game uses lots of adresses at $04xx, so that, we cannot leave my modified boot 2 code. Everything will be correctly set!
Code: |
*
* SIRIUS: GAMMA GOBLINS
*
org $0400
mx %11
lst off
*
*
*
dpBUFFER = $04
dpSECTORS = $06
dpPHASE = $0C
dpNIBBLE = $0E
dpINDEX = $0F
dpSECTOR = $3D
dpBYTE = $40
dpTRACK = $41
nbSECTORS = $0C
L0300 = $0300
L0356 = $0356
LA000 = $A000
WAIT EQU $FCA8
*
*
*
LDA #$00
STA dpPHASE
STA dpINDEX
L0416 JSR L0480 ; move arm
LDY dpINDEX
LDA L0428,Y
BEQ L047C
JSR L0434 ; load data
INC dpINDEX
JMP L0416 ; loop
L047C JMP LA000
L0428 HEX 0814404C5864707C8894A000
*
* LOAD DATA
*
L0434 STA dpBUFFER+1
LDA #$0C
STA dpTRACK
LDY #$00
STY dpBUFFER
]lp ldx dpTRACK
lda INTER,x
sta dpSECTOR
JSR readHEADER
inc dpBUFFER+1
dec dpTRACK
bne ]lp
rts
*
* We are at $0700 ;-)
*
readHEADER CLC
readDATA PHP
read1 LDA $C0EC
BPL *-3
read2 EOR #$D5
BNE read1
LDA $C0EC
BPL *-3
CMP #$AA
BNE read2
LDA $C0EC
BPL *-3
CMP #$96
BEQ doHEADER
PLP
BCC readHEADER
EOR #$AD
BEQ doDATA
BNE readHEADER
* Read header
doHEADER LDY #$03
]lp STA dpBYTE
LDA $C0EC
BPL *-3
ROL
STA dpNIBBLE
LDA $C0EC
BPL *-3
AND dpNIBBLE
DEY
BNE ]lp
PLP
CMP dpSECTOR ; Right sector ?
BNE readHEADER
BCS readDATA
* Read data
doDATA LDY #$56
]lp LDX $C0EC
BPL *-3
EOR L0356-$80,X
DEY
STA L0300,Y
BNE ]lp
]lp LDX $C0EC ; Y equals 0 ;-)
BPL *-3
EOR L0356-$80,X
STA (dpBUFFER),Y
INY
BNE ]lp
LDX $C0EC ; checksum
BPL *-3
EOR L0356-$80,X
doDATA1 BNE readHEADER
* Denibblize
doNIBBLE1 LDX #$56 ; Y equals 0 ;-)
doNIBBLE2 DEX
BMI doNIBBLE1
LDA (dpBUFFER),Y
STA L0500,X
LSR L0300,X
STA L0600,X
ROL
LSR L0300,X
STA L0700,X
ROL
STA (dpBUFFER),Y
INY
BNE doNIBBLE2
rts
* Interleaving
INTER HEX 06080A0C0E
HEX 01030507090B0D00
*
* MOVE ARM
*
L0480 LDY #$02 ; by 2 phases
]lp INC dpPHASE
LDA dpPHASE
AND #$03
ASL
TAX
LDA $C0E1,X
JSR L04A0
LDA $C0E0,X
JSR L04A0
DEY
BNE ]lp
RTS
L04A0 LDA #$40
JMP WAIT
ds \
L0500 HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
L0600 HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
L0700 HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 8899AABBCCDDEEFF0011223344556677
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566778899AABBCCDDEEFF
HEX 00112233445566770000000000000000
|
|
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 28 Sep 2007, 9:54 Sujet du message: |
|
|
Last but not least, my code at $A000 that is there to:
- copy the data at $0200
- copy the data at $0400..$07FF
- set the right values in ZP and stack
- jumps to the program...
Code: |
*
* SIRIUS: GAMMA GOBLINS
*
org $a000
mx %11
lst off
*
*
*
FINAL_VALUE = $AAEE
FINAL_JUMP = $BBFF ; ADR = $8FBF
dpBUF = $00
dp4E = $4E
dp4F = $4F
nbSECTORS = $0C
L0200 = $0200
L0400 = $0400
L0500 = $0500
L0536 = $0536
L0570 = $0570
L0574 = $0574
L0588 = $0588
L0600 = $0600
L0700 = $0700
LD000 = $D000
SOFTEV EQU $03F2
PWREDUP EQU $03F4
SPKR EQU $C030
TXTPAGE2 EQU $C055
ROMIN2 EQU $C081
RDROM2 EQU $C082
INIT EQU $FB2F
WAIT EQU $FCA8
RESETV EQU $FFFC
*
*
*
JSR L05C6
LDA #<L0574
STA $36
LDA #>L0574
STA $37
L047C JMP L04A8 ; Next jump please
L04A8 ldy #0
]lp lda PAGE2,y
STA L0200,Y
INY
CPY #$40
BNE ]lp
ldy #0
]lp lda PAGE4,y
sta L0400,y
lda PAGE5,y
sta L0500,y
lda PAGE6,y
sta L0600,y
lda PAGE7,y
sta L0700,y
iny
bne ]lp
lda #>FINAL_VALUE
EOR #$A3
STA dp4E
lda #<FINAL_VALUE
EOR #$EC
STA dp4F
lda #>FINAL_JUMP
EOR #$34
PHA ; stack jump address
lda #<FINAL_JUMP
EOR #$40
PHA ; stack jump address
LDA $C0E8 ; stop drive
JMP L0536
*
L05C6 LDA #<L0570
STA SOFTEV
LDA #>L0570
STA SOFTEV+1
EOR #$A5
STA PWREDUP
JMP L0540
*
* INIT LANGUAGE CARD
*
L0540 LDA ROMIN2
LDA ROMIN2
LDY #<LD000
STY dpBUF
LDA #>LD000
STA dpBUF+1
L054E LDA (dpBUF),Y
STA (dpBUF),Y
INY
BNE L054E
INC dpBUF+1
BNE L054E
LDA #<L0588
STA RESETV
LDA #>L0588
STA RESETV+1
LDA RDROM2
RTS
ds \
PAGE2 HEX A0A0A0A0A0A0A0A0A0A0100650265126
HEX 52265338A552E554AAA553E555900686
HEX 528553E65088D0E360FFFFFFFFFFFFFF
HEX FFFFFFFFFFFFFFFFFFFFFFFFFF00FF00
ds \
PAGE4 HEX 20C605A9748536A9058537A900850C85
HEX 0FA003208204A40FB92804F05F203404
HEX 208004E60F4C16040814404C5864707C
HEX 88940000850518A90C8506A0008404BD
HEX 8CC010FBC9DDD0F7BD8CC010FBC9ADD0
HEX F3BD8CC010FBC9DAD0EABD8CC010FB99
HEX 0006382A990007850EBD8CC010FB250E
HEX 9104C8D0E5E605C606D0DF604CA80400
HEX A002860DE60CA50C29030A050DAABD81
HEX C020A004BD80C020A00488D0E7A60D60
HEX A9404CA8FC000000BD8CC010FBC9FFD0
HEX F7BD8CC010FBC9FFD0EEBD8CC010FBC9
HEX AAD0E5BD8CC010FBC9AAD0DCA000BD8C
HEX C010FB382A850EBD8CC010FB250E9900
HEX 02C8C040D0E8A003208204A90820A8FC
HEX BD8CC010FBC9D5D0F7BD8CC010FB49A3
PAGE5 HEX 854EBD8CC010FB49EC854FBD8CC010FB
HEX 493448BD8CC010FB494048BD88C0A908
HEX 8501A0008400A292985100C8D0FBE601
HEX CAD0F6A8D042A9748538A9058539BA60
HEX AD81C0AD81C0A0008400A9D08501B100
HEX 9100C8D0F9E601D0F5A9888DFCFFA905
HEX 8DFDFFAD82C0608899AABBCCDDEEFF00
HEX A900F00CA901D008A902D004A904D000
HEX 09B08D0008202FFBAD55C0A9088501A0
HEX 018400A2B8A9A09100C8D0FBE601CAD0
HEX F6A9088500A080AD30C09838E901D0FB
HEX 88D0F4C600D0EEA60DCA8A4A4A4A4A09
HEX C048A9FF4860A000590000C8D0FAA8D0
HEX A3A9708DF203A9058DF30349A58DF403
HEX 4C400533445566778899AABBCCDDEEFF
HEX 112233445566778899AABBCCDDEEFF00
PAGE6 HEX FBABEFABFFEEFBFFEAAEEFEFABFFEFEF
HEX AEFFFFAEFFEEAAABFEEFAEFFEEEEEABA
HEX AEEEEFEEEEEABEFBAAEFABFFAEFAEFFB
HEX AAEFABFFEEEEFAABFEFBFFFABBEAAFAE
HEX BEFEFBFFEAABBAAFFBBEEAFEFFAFFFAE
HEX AAEFEEEEEAAAFEAAEEABFFBAAFFBAEEE
HEX EFEEFBFFFAEAEEEFFAFAFBAAEFABFFEA
HEX FAFEAAEEABFFFABAFEAAEEFBFFBAAAFE
HEX AEEEFAFEAAABEEFBFFFAAFFEEEEEAAAB
HEX FBAAEFAFFFFEAAEAABFEAAEAABFEBABE
HEX AFFFFAAFBAFFEFBAEAEFEEAEFFEEAFFF
HEX EFAFFFBAAAFEFFAEFFEFFEAEFFFEAFFF
HEX FFAFFFBEBABEBBAAFEEEAEEAEFFAFFEE
HEX AFFFEEEEBBFFFFAFFFFBAAAEFEAAABEE
HEX FBFFEAAAFEEFAEFFBAFAFABEBFAEEAFE
HEX EEAFFAABBEAEEAFABEFABAFEEAFEEAEB
PAGE7 HEX F757DF57FFDDF7FFD55DDFDF57FFDFDF
HEX 5DFFFF5DFFDD5557FDDF5DFFDDDDD575
HEX 5DDDDFDDDDD57DF755DF57FF5DF5DFF7
HEX 55DF57FFDDDDF557FDF7FFF577D55F5D
HEX 7DFDF7FFD557755FF77DD5FDFF5FFF5D
HEX 55DFDDDDD555FD55DD57FF755FF75DDD
HEX DFDDF7FFF5D5DDDFF5F5F755DF57FFD5
HEX F5FD55DD57FFF575FD55DDF7FF7555FD
HEX 5DDDF5FD5557DDF7FFF55FFDDDDD5557
HEX F755DF5FFFFD55D557FD55D557FD757D
HEX 5FFFF55F75FFDF75D5DFDD5DFFDD5FFF
HEX DF5FFF7555FDFF5DFFDFFD5DFFFD5FFF
HEX FF5FFF7D757D7755FDDD5DD5DFF5FFDD
HEX 5FFFDDDD77FFFF5FFFF7555DFD5557DD
HEX F7FFD555FDDF5DFF75F5F57D7F5DD5FD
HEX DD5FF5577D5DD5F57DF575FDD5FDD5D7
|
|
|
Revenir en haut de page |
|
|
toinet
Inscrit le: 15 Juin 2007 Messages: 326 Localisation: Paris, France
|
Post� le: Ven 28 Sep 2007, 9:58 Sujet du message: |
|
|
Make it IIgs compatible!
The code at $8FC0 uses a lot of false opcodes that are interpreted by my IIgs. I supposed that in emulation mode, there were no issues. But that is not true!
The following is the original code where false opcodes have been HEXed. On the disk image that has been made from the software, the original code is to be found on TB/S7, the modified code on T9/S7. I have replaced them with the NOP ($EA) opcode.
Code: |
L8F80 HEX 1A
HEX 3A
LDA #$F0
HEX 5A
STA $36
LDA #$FD
HEX 1A
STA $37
HEX 1A
STX $5A
HEX 5A
TSX
HEX 3A
DEX
HEX 5A
HEX 3A
DEX
HEX 5A
HEX 3A
HEX 7A
CPX $5A
BNE L8FA4
HEX 5A
HEX 7A
LDA #$7E
HEX 3A
BNE L8FAB
L8FA4 HEX 8F
L8FA5 HEX 1A
JMP $057C
HEX 3A
HEX 5A
L8FAB LDY #$06
HEX 1A
LDX $0204,Y
HEX 5A
HEX 7A
CPX #$10
HEX 5A
BNE L8FA5
HEX 3A
STA $C047,X
HEX 1A
BEQ L8FCC
HEX 3A
L8FC0 HEX 1A <= the real entry point
HEX 5A
HEX 7A
HEX 3A
L8FC4 JMP L8F80
HEX 5A
HEX 7A
PHA
PHA
PHA
L8FCC PHA
PHA
LDA #$03
STA $0679
HEX 1A
HEX 5A
STA $067A
HEX 3A
STA $067B
HEX 3A
HEX 7A
HEX 3A
HEX 5A
HEX 3A
HEX 1A
HEX 7A
HEX 1A
HEX 5A
JSR $5E30
JSR $60D0
JSR L8000
JSR $7DB0
JSR $4390
LDA #$90
STA $AD
TSX
STX $077D
JMP $8E60
HEX E3
L9000 TSX
STX $077D
LDA $D0
STA $F1
INC $F1
CLC
BCC L9029
L900D LDA $F1
PHA
JSR $48E0
PLA
STA $F1
RTS
L9017 JSR $4AB0
JSR $4BAD
JSR $4D30
JSR L900D
JSR $4BAD
JSR $4D30
L9029 JSR $6460
JSR $4BAD
JSR $4D30
JSR $5120
JSR $4BAD
JSR $4D30
JSR $4AB0
JSR $4BAD
JSR $4D30
JSR $5658
JSR $4BAD
JSR $4D30
JSR $6460
JSR $4BAD
JSR $4D30
JSR $43AF
JSR $4BAD
JSR $4D30
JSR $4AB0
JSR $4BAD
JSR $4D30
JSR L900D
JSR $4BAD
JSR $4D30
JSR $5658
JSR $4BAD
JSR $4D30
JSR $6460
JSR $4BAD
JSR $4D30
JSR $4AB0
JSR $4BAD
JSR $4D30
JSR $5120
JSR $4BAD
JSR $4D30
JSR $6460
JSR $4BAD
JSR $4D30
JSR $5658
JSR $4BAD
JSR $4D30
JSR $6BFE
JSR $50B0
JMP L9017
|
|
|
Revenir en haut de page |
|
|
|