Index du Forum
IDENTIFICATION SERVEUR : 10.14.20.25 - CLIENT : 3.237.186.116

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Gamma Goblins (Sirius Software, 1981)

 
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Sam 23 Juin 2007, 23:17    Sujet du message: Gamma Goblins (Sirius Software, 1981) Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 29 Juin 2007, 12:46    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 29 Juin 2007, 12:47    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Jeu 27 Sep 2007, 21:04    Sujet du message: Répondre en citant

Gamma Goblins is now fully-cracked and works like a charm on my IIgs Wink The complete protection removal will be written tomorrow.

You know what? I am happy...

antoine
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 28 Sep 2007, 9:50    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 28 Sep 2007, 9:53    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 28 Sep 2007, 9:54    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 3055
Localisation: Le Chesnay, France

MessagePosté le: Ven 28 Sep 2007, 9:58    Sujet du message: Répondre en citant

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
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com