Difference between revisions of "6 Games Programs"
Jump to navigation
Jump to search
(Created page with "Category:C64 Game Compilation ==== Content ==== ===== Side 0 ===== * Single Disk Backup V1.0 by Michael Schaff, 27 Jul 1982 * Scooper Froot [https://www.lemon64....") |
|||
| (3 intermediate revisions by the same user not shown) | |||
| Line 9: | Line 9: | ||
* [[Depth Charge]] [https://www.mobygames.com/game/69748/depth-charge/ mobygames link] | * [[Depth Charge]] [https://www.mobygames.com/game/69748/depth-charge/ mobygames link] | ||
* [[Labyrinth]] (color version) [https://www.mobygames.com/game/50163/labyrinth/ mobygames link] | * [[Labyrinth]] (color version) [https://www.mobygames.com/game/50163/labyrinth/ mobygames link] | ||
| − | * [[The Quest]] [https://www.mobygames.com/game/84690/the-quest/ mobygames link] | + | * [[The Quest (Commodore)]] [https://www.mobygames.com/game/84690/the-quest/ mobygames link] |
* [[Patience]] [https://www.mobygames.com/game/72041/patience/ mobygames link] | * [[Patience]] [https://www.mobygames.com/game/72041/patience/ mobygames link] | ||
| Line 65: | Line 65: | ||
File:Commodore_6GamesPrograms_disk_front.jpg|Disk Front | File:Commodore_6GamesPrograms_disk_front.jpg|Disk Front | ||
</gallery> | </gallery> | ||
| + | |||
| + | The initial loader loads to $9E80 and then decrypts with | ||
| + | 0225 a2 00 ldx #$00 | ||
| + | 0227 a0 08 ldy #$08 // 8 bits | ||
| + | 0229 bd 80 9e lda $9e80,x | ||
| + | 022c 8d 3f 02 sta $023f | ||
| + | 022f 0e 3f 02 asl $023f // shift highest bit to carry | ||
| + | 0232 6a ror a // shift it in byte from top, effectively mirroring the bits | ||
| + | 0233 88 dey | ||
| + | 0234 d0 f9 bne $022f | ||
| + | 0236 9d 80 9e sta $9e80,x | ||
| + | 0239 e8 inx | ||
| + | 023a d0 eb bne $0227 | ||
| + | 023c 4c 80 9e jmp $9e80 | ||
| + | The routine is the same for all games. | ||
| + | |||
| + | The decrypted routine that loads the game looks like this: | ||
| + | .C:9e80 20 CC FF JSR $FFCC // CLRCHN | ||
| + | .C:9e83 A9 0F LDA #$0F | ||
| + | .C:9e85 A2 08 LDX #$08 | ||
| + | .C:9e87 A0 0F LDY #$0F | ||
| + | .C:9e89 20 BA FF JSR $FFBA // SETLFS | ||
| + | .C:9e8c A9 02 LDA #$02 | ||
| + | .C:9e8e A2 DD LDX #$DD | ||
| + | .C:9e90 A0 9E LDY #$9E | ||
| + | .C:9e92 20 BD FF JSR $FFBD // SETNAM | ||
| + | .C:9e95 20 C0 FF JSR $FFC0 // OPEN | ||
| + | .C:9e98 A9 02 LDA #$02 | ||
| + | .C:9e9a A2 08 LDX #$08 | ||
| + | .C:9e9c A0 02 LDY #$02 | ||
| + | .C:9e9e 20 BA FF JSR $FFBA // SETLFS | ||
| + | .C:9ea1 A9 01 LDA #$01 | ||
| + | .C:9ea3 A2 DF LDX #$DF | ||
| + | .C:9ea5 A0 9E LDY #$9E | ||
| + | .C:9ea7 20 BD FF JSR $FFBD // SETNAM | ||
| + | .C:9eaa 20 C0 FF JSR $FFC0 // OPEN | ||
| + | .C:9ead A2 0F LDX #$0F | ||
| + | .C:9eaf 20 C9 FF JSR $FFC9 // CHKOUT | ||
| + | .C:9eb2 A0 00 LDY #$00 | ||
| + | .C:9eb4 B9 D1 9E LDA $9ED1,Y | ||
| + | .C:9eb7 F0 06 BEQ $9EBF | ||
| + | .C:9eb9 20 D2 FF JSR $FFD2 // CHROUT | ||
| + | .C:9ebc C8 INY | ||
| + | .C:9ebd D0 F5 BNE $9EB4 | ||
| + | .C:9ebf 20 CC FF JSR $FFCC // CLRCHN | ||
| + | .C:9ec2 A2 0F LDX #$0F | ||
| + | .C:9ec4 20 C6 FF JSR $FFC6 // CHKIN | ||
| + | .C:9ec7 20 CF FF JSR $FFCF // CHRIN | ||
| + | .C:9eca C9 32 CMP #$32 | ||
| + | .C:9ecc F0 12 BEQ $9EE0 | ||
| + | .C:9ece 6C FC FF JMP ($FFFC) // RESET | ||
| + | .C:9ed1 55 31 EOR $31,X // This is sent to disk drive | ||
| + | .C:9ed3 3A NOOP | ||
| + | .C:9ed4 32 JAM | ||
| + | .C:9ed5 20 30 20 JSR $2030 | ||
| + | .C:9ed8 31 20 AND ($20),Y | ||
| + | .C:9eda 35 0D AND $0D,X | ||
| + | .C:9edc 00 BRK | ||
| + | .C:9edd 49 30 EOR #$30 | ||
| + | .C:9edf 23 20 RLA ($20,X) | ||
| + | .C:9ee1 CC FF A9 CPY $A9FF | ||
| + | .C:9ee4 0F 20 C3 SLO $C320 | ||
| + | .C:9ee7 FF A9 02 ISB $02A9,X | ||
| + | .C:9eea 20 C3 FF JSR $FFC3 // CLOSE | ||
| + | .C:9eed A2 01 LDX #$01 | ||
| + | .C:9eef A0 08 LDY #$08 | ||
| + | .C:9ef1 18 CLC | ||
| + | .C:9ef2 20 9C FF JSR $FF9C // MEMBOT | ||
| + | .C:9ef5 A9 01 LDA #$01 | ||
| + | .C:9ef7 A2 08 LDX #$08 | ||
| + | .C:9ef9 A0 00 LDY #$00 | ||
| + | .C:9efb 20 BA FF JSR $FFBA // SETLFS | ||
| + | .C:9efe AD 86 9F LDA $9F86 | ||
| + | .C:9f01 A2 87 LDX #$87 | ||
| + | .C:9f03 A0 9F LDY #$9F | ||
| + | .C:9f05 20 BD FF JSR $FFBD // SETNAM | ||
| + | .C:9f08 A9 00 LDA #$00 | ||
| + | .C:9f0a A2 01 LDX #$01 | ||
| + | .C:9f0c A0 08 LDY #$08 | ||
| + | .C:9f0e 20 D5 FF JSR $FFD5 // LOAD | ||
| + | .C:9f11 90 03 BCC $9F16 | ||
| + | .C:9f13 6C FC FF JMP ($FFFC) // RESET | ||
| + | .C:9f16 86 2D STX $2D // VARTAB vector | ||
| + | .C:9f18 84 2E STY $2E | ||
| + | .C:9f1a A5 2B LDA $2B // Pushes TXTTAB vector | ||
| + | .C:9f1c 48 PHA | ||
| + | .C:9f1d A5 2C LDA $2C | ||
| + | .C:9f1f 48 PHA | ||
| + | .C:9f20 A0 00 LDY #$00 | ||
| + | .C:9f22 A2 08 LDX #$08 // for 8 bits | ||
| + | .C:9f24 B1 2B LDA ($2B),Y // Load from Basic Program Text | ||
| + | .C:9f26 0A ASL A // shift left bit to carry | ||
| + | .C:9f27 6E 79 9F ROR $9F79 // rotate it right into 9F79 (mirrors bits in byte) | ||
| + | .C:9f2a CA DEX | ||
| + | .C:9f2b D0 F9 BNE $9F26 | ||
| + | .C:9f2d AD 79 9F LDA $9F79 | ||
| + | .C:9f30 91 2B STA ($2B),Y // write it back | ||
| + | .C:9f32 E6 2B INC $2B | ||
| + | .C:9f34 D0 02 BNE $9F38 | ||
| + | .C:9f36 E6 2C INC $2C | ||
| + | .C:9f38 A5 2C LDA $2C | ||
| + | .C:9f3a C5 2E CMP $2E | ||
| + | .C:9f3c D0 E4 BNE $9F22 | ||
| + | .C:9f3e A5 2B LDA $2B | ||
| + | .C:9f40 C5 2D CMP $2D | ||
| + | .C:9f42 D0 DE BNE $9F22 // loop until VARTAB is reached | ||
| + | .C:9f44 68 PLA // restore TXTAB | ||
| + | .C:9f45 85 2C STA $2C | ||
| + | .C:9f47 68 PLA | ||
| + | .C:9f48 85 2B STA $2B | ||
| + | .C:9f4a 20 33 A5 JSR $A533 // Re-link BASIC program | ||
| + | .C:9f4d A2 15 LDX #$15 // who knows why 21 bytes starting from 9F6A are read here | ||
| + | .C:9f4f BD 6A 9F LDA $9F6A,X | ||
| + | .C:9f55 CA DEX | ||
| + | .C:9f56 10 F7 BPL $9F4F | ||
| + | .C:9f58 A9 4C LDA #$4C // write in buffer for CHRGET routine: 4C AD 02 | ||
| + | .C:9f5a 85 73 STA $73 | ||
| + | .C:9f5c A9 AD LDA #$AD | ||
| + | .C:9f5e 85 74 STA $74 | ||
| + | .C:9f60 A9 02 LDA #$02 | ||
| + | .C:9f62 85 75 STA $75 | ||
| + | .C:9f64 20 8E A6 JSR $A68E // Set program pointer to BASIC-start | ||
| + | .C:9f67 4C AE A7 JMP $A7AE // Interpreter loop, set up next statement for execution | ||
| + | .C:9f6a A5 3A LDA $3A // These are the bytes loaded in the loop up there for unknown reason | ||
| + | .C:9f6c C9 FF CMP #$FF | ||
| + | .C:9f6e F0 F4 BEQ $9F64 | ||
| + | .C:9f70 E6 7A INC $7A | ||
| + | .C:9f72 D0 02 BNE $9F76 | ||
| + | .C:9f74 E6 7B INC $7B | ||
| + | .C:9f76 4C 79 00 JMP $0079 | ||
| + | .C:9f79 00 BRK | ||
| + | .C:9f7a 00 BRK | ||
| + | .C:9f7b 00 BRK | ||
| + | .C:9f7c 00 BRK | ||
| + | .C:9f7d 00 BRK | ||
| + | .C:9f7e 00 BRK | ||
| + | .C:9f7f 00 BRK | ||
| + | .C:9f80 00 BRK | ||
| + | .C:9f81 00 BRK | ||
| + | .C:9f82 00 BRK | ||
| + | .C:9f83 00 BRK | ||
| + | .C:9f84 00 BRK | ||
| + | .C:9f85 00 BRK | ||
| + | .C:9f86 0D 53 4F ORA $4F53 // File Name with suffix 2 | ||
| + | .C:9f89 4F 50 45 SRE $4550 | ||
| + | .C:9f8c 52 JAM | ||
| + | .C:9f8d 20 46 52 JSR $5246 | ||
| + | .C:9f90 4F 4F 54 SRE $544F | ||
| + | .C:9f93 32 JAM | ||
Latest revision as of 22:12, 1 May 2026
Content
Side 0
- Single Disk Backup V1.0 by Michael Schaff, 27 Jul 1982
- Scooper Froot lemon64 link
- Stellar Wars mobygames link
- Depth Charge mobygames link
- Labyrinth (color version) mobygames link
- The Quest (Commodore) mobygames link
- Patience mobygames link
Side 1
Side 1 is empty.
Source 1
| Property | Data |
|---|---|
| Title | 6 Games Programs |
| Publisher and/or Developer | Commodore UK Ltd. |
| Year | 1983? |
| Disk(s) | 1 |
| Number of Index Holes | ? |
| Media Type | 5.25 DSDD |
| Retail, Budget or Compilation (with name) | Compilation |
| Country of Release | UK |
| Language(s) | English |
| Platform | C64 |
| NTSC or PAL | PAL |
| Protection | Checks for error on track 1 sector 5 |
| Working? | Yes |
| Archived | 14 Mar 2026 enigma/parser, provided by @rndt@F64 |
| Verified by | enigma |
Streams
File:Streams Commodore 6GamesPrograms arndt.zip
G64
File:Commodore 6GamesPrograms arndt s0.g64
Disk side 1 is empty.
Additional Information
From internet:
The initial loader loads to $9E80 and then decrypts with
0225 a2 00 ldx #$00 0227 a0 08 ldy #$08 // 8 bits 0229 bd 80 9e lda $9e80,x 022c 8d 3f 02 sta $023f 022f 0e 3f 02 asl $023f // shift highest bit to carry 0232 6a ror a // shift it in byte from top, effectively mirroring the bits 0233 88 dey 0234 d0 f9 bne $022f 0236 9d 80 9e sta $9e80,x 0239 e8 inx 023a d0 eb bne $0227 023c 4c 80 9e jmp $9e80
The routine is the same for all games.
The decrypted routine that loads the game looks like this:
.C:9e80 20 CC FF JSR $FFCC // CLRCHN .C:9e83 A9 0F LDA #$0F .C:9e85 A2 08 LDX #$08 .C:9e87 A0 0F LDY #$0F .C:9e89 20 BA FF JSR $FFBA // SETLFS .C:9e8c A9 02 LDA #$02 .C:9e8e A2 DD LDX #$DD .C:9e90 A0 9E LDY #$9E .C:9e92 20 BD FF JSR $FFBD // SETNAM .C:9e95 20 C0 FF JSR $FFC0 // OPEN .C:9e98 A9 02 LDA #$02 .C:9e9a A2 08 LDX #$08 .C:9e9c A0 02 LDY #$02 .C:9e9e 20 BA FF JSR $FFBA // SETLFS .C:9ea1 A9 01 LDA #$01 .C:9ea3 A2 DF LDX #$DF .C:9ea5 A0 9E LDY #$9E .C:9ea7 20 BD FF JSR $FFBD // SETNAM .C:9eaa 20 C0 FF JSR $FFC0 // OPEN .C:9ead A2 0F LDX #$0F .C:9eaf 20 C9 FF JSR $FFC9 // CHKOUT .C:9eb2 A0 00 LDY #$00 .C:9eb4 B9 D1 9E LDA $9ED1,Y .C:9eb7 F0 06 BEQ $9EBF .C:9eb9 20 D2 FF JSR $FFD2 // CHROUT .C:9ebc C8 INY .C:9ebd D0 F5 BNE $9EB4 .C:9ebf 20 CC FF JSR $FFCC // CLRCHN .C:9ec2 A2 0F LDX #$0F .C:9ec4 20 C6 FF JSR $FFC6 // CHKIN .C:9ec7 20 CF FF JSR $FFCF // CHRIN .C:9eca C9 32 CMP #$32 .C:9ecc F0 12 BEQ $9EE0 .C:9ece 6C FC FF JMP ($FFFC) // RESET .C:9ed1 55 31 EOR $31,X // This is sent to disk drive .C:9ed3 3A NOOP .C:9ed4 32 JAM .C:9ed5 20 30 20 JSR $2030 .C:9ed8 31 20 AND ($20),Y .C:9eda 35 0D AND $0D,X .C:9edc 00 BRK .C:9edd 49 30 EOR #$30 .C:9edf 23 20 RLA ($20,X) .C:9ee1 CC FF A9 CPY $A9FF .C:9ee4 0F 20 C3 SLO $C320 .C:9ee7 FF A9 02 ISB $02A9,X .C:9eea 20 C3 FF JSR $FFC3 // CLOSE .C:9eed A2 01 LDX #$01 .C:9eef A0 08 LDY #$08 .C:9ef1 18 CLC .C:9ef2 20 9C FF JSR $FF9C // MEMBOT .C:9ef5 A9 01 LDA #$01 .C:9ef7 A2 08 LDX #$08 .C:9ef9 A0 00 LDY #$00 .C:9efb 20 BA FF JSR $FFBA // SETLFS .C:9efe AD 86 9F LDA $9F86 .C:9f01 A2 87 LDX #$87 .C:9f03 A0 9F LDY #$9F .C:9f05 20 BD FF JSR $FFBD // SETNAM .C:9f08 A9 00 LDA #$00 .C:9f0a A2 01 LDX #$01 .C:9f0c A0 08 LDY #$08 .C:9f0e 20 D5 FF JSR $FFD5 // LOAD .C:9f11 90 03 BCC $9F16 .C:9f13 6C FC FF JMP ($FFFC) // RESET .C:9f16 86 2D STX $2D // VARTAB vector .C:9f18 84 2E STY $2E .C:9f1a A5 2B LDA $2B // Pushes TXTTAB vector .C:9f1c 48 PHA .C:9f1d A5 2C LDA $2C .C:9f1f 48 PHA .C:9f20 A0 00 LDY #$00 .C:9f22 A2 08 LDX #$08 // for 8 bits .C:9f24 B1 2B LDA ($2B),Y // Load from Basic Program Text .C:9f26 0A ASL A // shift left bit to carry .C:9f27 6E 79 9F ROR $9F79 // rotate it right into 9F79 (mirrors bits in byte) .C:9f2a CA DEX .C:9f2b D0 F9 BNE $9F26 .C:9f2d AD 79 9F LDA $9F79 .C:9f30 91 2B STA ($2B),Y // write it back .C:9f32 E6 2B INC $2B .C:9f34 D0 02 BNE $9F38 .C:9f36 E6 2C INC $2C .C:9f38 A5 2C LDA $2C .C:9f3a C5 2E CMP $2E .C:9f3c D0 E4 BNE $9F22 .C:9f3e A5 2B LDA $2B .C:9f40 C5 2D CMP $2D .C:9f42 D0 DE BNE $9F22 // loop until VARTAB is reached .C:9f44 68 PLA // restore TXTAB .C:9f45 85 2C STA $2C .C:9f47 68 PLA .C:9f48 85 2B STA $2B .C:9f4a 20 33 A5 JSR $A533 // Re-link BASIC program .C:9f4d A2 15 LDX #$15 // who knows why 21 bytes starting from 9F6A are read here .C:9f4f BD 6A 9F LDA $9F6A,X .C:9f55 CA DEX .C:9f56 10 F7 BPL $9F4F .C:9f58 A9 4C LDA #$4C // write in buffer for CHRGET routine: 4C AD 02 .C:9f5a 85 73 STA $73 .C:9f5c A9 AD LDA #$AD .C:9f5e 85 74 STA $74 .C:9f60 A9 02 LDA #$02 .C:9f62 85 75 STA $75 .C:9f64 20 8E A6 JSR $A68E // Set program pointer to BASIC-start .C:9f67 4C AE A7 JMP $A7AE // Interpreter loop, set up next statement for execution .C:9f6a A5 3A LDA $3A // These are the bytes loaded in the loop up there for unknown reason .C:9f6c C9 FF CMP #$FF .C:9f6e F0 F4 BEQ $9F64 .C:9f70 E6 7A INC $7A .C:9f72 D0 02 BNE $9F76 .C:9f74 E6 7B INC $7B .C:9f76 4C 79 00 JMP $0079 .C:9f79 00 BRK .C:9f7a 00 BRK .C:9f7b 00 BRK .C:9f7c 00 BRK .C:9f7d 00 BRK .C:9f7e 00 BRK .C:9f7f 00 BRK .C:9f80 00 BRK .C:9f81 00 BRK .C:9f82 00 BRK .C:9f83 00 BRK .C:9f84 00 BRK .C:9f85 00 BRK .C:9f86 0D 53 4F ORA $4F53 // File Name with suffix 2 .C:9f89 4F 50 45 SRE $4550 .C:9f8c 52 JAM .C:9f8d 20 46 52 JSR $5246 .C:9f90 4F 4F 54 SRE $544F .C:9f93 32 JAM