Difference between revisions of "Frankie crashed on Jupiter"

From Software Archive
Jump to navigation Jump to search
 
(3 intermediate revisions by the same user not shown)
Line 91: Line 91:
 
==== Streams ====
 
==== Streams ====
 
[[File:Streams_Kingsoft_FrankieCrashedOnJupiter_arndt.zip]]
 
[[File:Streams_Kingsoft_FrankieCrashedOnJupiter_arndt.zip]]
 +
==== P64 ====
 +
[[File:Kingsoft_FrankieCrashedOnJupiter_arndt_s0.p64]]
 
==== G64 ====
 
==== G64 ====
 
[[File:Kingsoft_FrankieCrashedOnJupiter_arndt_s0.g64]]
 
[[File:Kingsoft_FrankieCrashedOnJupiter_arndt_s0.g64]]
  
 
Disk side 1 is empty.
 
Disk side 1 is empty.
 +
 +
== Protection Analysis ==
 +
=== Summary ===
 +
 +
==== Floppy ====
 +
* Seek to track 1 sector 20
 +
* read header
 +
* switch speedzone to 0
 +
* wait until byte is ready in shift register - drop this, then read 256 raw bytes to buffer
 +
* decode buffer from GCR to $CC usable bytes
 +
* return OK
 +
 +
==== C64 ====
 +
* Read $80 bytes from floppy buffer to RAM
 +
* Sum up the first $70 bytes and compare to hard coded checksum (must be $2AC1)
 +
* Reset if invalid
 +
 +
==== Details ====
 +
<nowiki>
 +
Floppy code:
 +
 +
.8:0300  4C BC 01    JMP $01BC
 +
.8:0303  A9 01      LDA #$01 // buffer 0 track 1
 +
.8:0305  85 06      STA $06
 +
.8:0307  A9 14      LDA #$14 // buffer 0 sector 20
 +
.8:0309  85 07      STA $07
 +
.8:030b  A9 B0      LDA #$B0 // Job: SEEK
 +
.8:030d  85 00      STA $00
 +
.8:030f  A5 00      LDA $00
 +
.8:0311  30 FC      BMI $030F // wait until done
 +
.8:0313  C9 01      CMP #$01
 +
.8:0315  D0 F4      BNE $030B // wait until OK
 +
.8:0317  A0 2C      LDY #$2C
 +
.8:0319  B9 25 03    LDA $0325,Y // copy routine from 0325 -> 01BC
 +
.8:031c  99 BC 01    STA $01BC,Y
 +
.8:031f  88          DEY
 +
.8:0320  10 F7      BPL $0319
 +
.8:0322  4C E0 01    JMP $01E0 // then jump to 01E0
 +
.8:0325  20 0A F5    JSR $F50A // this code and below is copied to 01bc
 +
.8:0328  AD 00 1C    LDA $1C00
 +
(8:$032b) see below for the copied routine
 +
.8:032b  49 60      EOR #$60
 +
.8:032d  8D 00 1C    STA $1C00
 +
.8:0330  50 FE      BVC $0330
 +
.8:0332  B8          CLV
 +
.8:0333  AD 01 1C    LDA $1C01
 +
.8:0336  91 30      STA ($30),Y
 +
.8:0338  C8          INY
 +
.8:0339  D0 F5      BNE $0330
 +
.8:033b  20 E0 F8    JSR $F8E0
 +
.8:033e  AD 00 1C    LDA $1C00
 +
.8:0341  49 60      EOR #$60
 +
.8:0343  8D 00 1C    STA $1C00
 +
.8:0346  4C 05 F5    JMP $F505
 +
.8:0349  A9 E0      LDA #$E0
 +
.8:034b  85 00      STA $00
 +
.8:034d  A5 00      LDA $00
 +
.8:034f  30 FC      BMI $034D
 +
.8:0351  60          RTS
 +
 +
Copied routine:
 +
.8:01bc  20 0A F5    JSR $F50A -> read block header and wait for sync
 +
.8:01bf  AD 00 1C    LDA $1C00
 +
.8:01c2  49 60      EOR #$60
 +
.8:01c4  8D 00 1C    STA $1C00 -> 1C Motor On, Led On, Write Protect Sense On, Speedzone 0
 +
.8:01c7  50 FE      BVC $01C7 -> wait for full byte
 +
.8:01c9  B8          CLV
 +
.8:01ca  AD 01 1C    LDA $1C01  -> read byte
 +
.8:01cd  91 30      STA ($30),Y -> write to $0300
 +
.8:01cf  C8          INY
 +
.8:01d0  D0 F5      BNE $01C7 -> 256 bytes
 +
.8:01d2  20 E0 F8    JSR $F8E0 -> Decode 255 GCR bytes to 204 BIN bytes, then the last byte from the previous buffer with 64 GCR bytes from $01BA
 +
                                  for the remaining 52 BIN bytes
 +
                                  At $01BA is in that case no senseful data loaded. Later only the first $70 bytes are evaluated.
 +
.8:01d5  AD 00 1C    LDA $1C00 -> 03
 +
.8:01d8  49 60      EOR #$60
 +
.8:01da  8D 00 1C    STA $1C00 -> FC
 +
.8:01dd  4C 05 F5    JMP $F505 -> set "OK" error message -> CODE ENDS HERE when OK, then C64 reads floppy memory, see code below
 +
.8:01e0  A9 E0      LDA #$E0  -> execute program in $0300 -> From $0322
 +
.8:01e2  85 00      STA $00  -> Job starts execution at $0300, where a jump jumps to $01BC
 +
.8:01e4  A5 00      LDA $00
 +
(8:$01e6) d
 +
.8:01e6  30 FC      BMI $01E4 -> wait for program
 +
.8:01e8  60          RTS
 +
 +
Raw bytes read to buffer at 0300:
 +
>8:0300  55 f4 a5 57  79 95 ae bc  e5 4a ea 92  95 aa b7 6a  77 95 ea eb  ce 54 a4 e5  U..Wy....J.....jw....T..
 +
>8:0318  a9 6a 95 de  aa af 73 54  a4 e7 4a 52  b2 9c e5 4a  ba da 9e aa  ba 73 7c dc  .j....sT..JR...J.....s|.
 +
>8:0330  fb 3d 4f 9f  54 d7 73 4d  5a 9c a9 af  cc af b6 aa  f2 6b 92 bf  69 4a 52 a4  .=O.T.sMZ........k..iJR.
 +
>8:0348  97 4e 59 92  a6 b9 e6 69  9b e4 a7 49  f9 92 9d b7  65 de 75 df  37 55 d6 7b  .NY....i...I....e.u.7U.{
 +
>8:0360  95 d5 75 cb  73 5c d9 29  f2 76 5d 77  25 ee 7c e4  a7 c9 cf 7c  dc f7 c9 f6  ..u.s\.).v]w%.|....|....
 +
>8:0378  73 dc e5 75  5d 74 dd 57  a9 f9 76 5d  e7 5e 4a 76  5f 39 29 f6  76 5d 57 35  s..u]t.W..v].^Jv_9).v]W5
 +
>8:0390  cb 7b 9d 97  55 de 92 9d  57 5a 4a 73  5c b7 dd 5f  d5 dd ee ae  ea ea ae ae  .{..U...WZJs\.._........
 +
>8:03a8  ea ae d7 5d  56 f5 bd dd  5d 5d 57 75  75 55 6a ab  ae b5 d5 55  d5 55 dd be  ...]V...]]WuuUj....U.U..
 +
>8:03c0  ea fa aa ae  d5 57 55 56  bb b5 aa ea  ea eb 6d b7  6e aa aa aa  aa aa aa bb  .....WUV......m.n.......
 +
>8:03d8  aa aa aa aa  d5 55 55 55  55 55 55 55  77 55 55 55  55 aa aa aa  ab 55 55 55  .....UUUUUUUwUUUU....UUU
 +
>8:03f0  55 dd 55 55  55 dd 55 55  55 57 5d d7  57 aa aa aa
 +
 +
After GCR decode, (message starts at 0338)
 +
>8:0300  a0 0f b9 26  71 99 00 d0  88 10 f7 c8  b9 1a 71 99  00 89 c8 c0  0d d0 f5 4c  ...&q.........q........L
 +
>8:0318  00 89 a0 00  98 99 00 71  c8 d0 fa 4c  ec 9e 9d 8e  5f 8f b3 8f  c8 90 c5 92  .......q...L...._.......
 +
>8:0330  7b c0 72 c4  81 ea 00 00  28 43 29 20  31 39 38 35  20 42 59 20  4b 49 4e 47  {.r.....(C) 1985 BY KING
 +
>8:0348  53 4f 46 54  0d 0d 41 4c  4c 20 52 49  47 48 54 53  20 52 45 53  45 52 56 45  SOFT..ALL RIGHTS RESERVE
 +
>8:0360  44 0d 0d 43  4f 50 59 49  4e 47 20 49  53 20 56 49  4f 4c 41 54  49 4f 4e 20  D..COPYING IS VIOLATION
 +
>8:0378  4f 46 20 4c  41 57 ff a7  4e d1 70 d0  70 da f4 ad  4f cd cd bf  4f af bf 4f  OF LAW..N.p.p...O...O..O
 +
>8:0390  06 f0 d4 67  0f 1f 0f b6  ff fe f0 fb  0f 4f 06 74  aa fa 70 dc  6b 4b f0 f0  ...g.........O.t..p.kK..
 +
>8:03a8  f0 f0 f0 74  f0 f0 f0 af  0f 0f 0f 0f  0f 0d af 0f  0f 10 f0 f0  ff 0f 0f 07  ...t....................
 +
>8:03c0  4f 0f 0f bf  0f 0f 07 17  1f 50 f0 f0  00 ff ff e6  ff ff ff ff  ff ff ff ff  O........P..............
 +
>8:03d8  ff ff ff ff  ff ff ff ff  ff ff ff ff  ff ff ff ff  ff 1d c8 ff  ff ff ff ff  ........................
 +
>8:03f0  ff ff 00 00  00 00 00 00  00 00 00 00  00 00 00 00
 +
 +
Decoded program part at 0300, not executed by floppy but later read to C64 memory at $7100:
 +
 +
.8:0300  A0 0F      LDY #$0F
 +
.8:0302  B9 26 71    LDA $7126,Y
 +
.8:0305  99 00 D0    STA $D000,Y
 +
.8:0308  88          DEY
 +
.8:0309  10 F7      BPL $0302
 +
.8:030b  C8          INY
 +
.8:030c  B9 1A 71    LDA $711A,Y
 +
.8:030f  99 00 89    STA $8900,Y
 +
.8:0312  C8          INY
 +
.8:0313  C0 0D      CPY #$0D
 +
.8:0315  D0 F5      BNE $030C
 +
.8:0317  4C 00 89    JMP $8900
 +
.8:031a  A0 00      LDY #$00
 +
.8:031c  98          TYA
 +
.8:031d  99 00 71    STA $7100,Y
 +
.8:0320  C8          INY
 +
.8:0321  D0 FA      BNE $031D
 +
.8:0323  4C EC 9E    JMP $9EEC
 +
 +
C64 routine reads floppy memory from 0300:
 +
128 bytes to $7100
 +
 +
.C:707a  A5 BA      LDA $BA
 +
.C:707c  20 09 ED    JSR $ED09 -> TALK
 +
.C:707f  A9 6F      LDA #$6F
 +
.C:7081  20 C7 ED    JSR $EDC7 -> Set Secondary Adress TALK
 +
.C:7084  A2 00      LDX #$00
 +
.C:7086  20 13 EE    JSR $EE13 -> Get Char from serial bus
 +
.C:7089  9D 00 71    STA $7100,X
 +
.C:708c  E8          INX
 +
.C:708d  10 F7      BPL $7086
 +
.C:708f  20 EF ED    JSR $EDEF -> Untalk
 +
.C:7092  A0 00      LDY #$00
 +
.C:7094  4C EE 70    JMP $70EE -> fill memory at $7000
 +
 +
.C:70ee  98          TYA        -> from $7094 fill 7000-70F0 with 00
 +
.C:70ef  99 00 70    STA $7000,Y
 +
.C:70f2  C8          INY
 +
.C:70f3  C0 F0      CPY #$F0
 +
.C:70f5  90 F8      BCC $70EF
 +
.C:70f7  20 60 72    JSR $7260
 +
.C:70fa  20 23 72    JSR $7223
 +
.C:70fd  4C 00 72    JMP $7200 -> Check protection signature with a checksum
 +
 +
Evaluation of data read from floppy, checks if sum is 2AC1
 +
.C:7200  A2 6F      LDX #$6F -> calculate some checksum from 70 bytes at 7100-716F
 +
.C:7202  A9 00      LDA #$00 A = 0, Y = 0
 +
.C:7204  A8          TAY
 +
.C:7205  18          CLC
 +
.C:7206  7D 00 71    ADC $7100,X A += MEM
 +
.C:7209  9A          TXS        Save X
 +
.C:720a  AA          TAX        X = A
 +
.C:720b  98          TYA        A = Y
 +
.C:720c  69 00      ADC #$00    A += carry // carrys are summed in Y
 +
.C:720e  A8          TAY        Y = A
 +
.C:720f  8A          TXA        A = X
 +
.C:7210  BA          TSX        Restore X
 +
.C:7211  CA          DEX
 +
.C:7212  10 F1      BPL $7205
 +
.C:7214  9A          TXS
 +
.C:7215  C0 2A      CPY #$2A  Y == 2A ?
 +
.C:7217  D0 07      BNE $7220
 +
.C:7219  C9 C1      CMP #$C1 -> A == C1 ?
 +
.C:721b  D0 03      BNE $7220
 +
.C:721d  4C 00 71    JMP $7100 -> OK?
 +
.C:7220  4C 09 80    JMP $8009 -> error?
 +
 +
Bytes at 7100
 +
>C:7100  a0 0f b9 26  71 99 00 d0  88 10 f7 c8  b9 1a 71 99  00 89 c8 c0  ...&q.........q.....
 +
>C:7114  0d d0 f5 4c  00 89 a0 00  98 99 00 71  c8 d0 fa 4c  ec 9e 9d 8e  ...L.......q...L....
 +
>C:7128  5f 8f b3 8f  c8 90 c5 92  7b c0 72 c4  81 ea 00 00  28 43 29 20  _.......{.r.....(C)
 +
>C:713c  31 39 38 35  20 42 59 20  4b 49 4e 47  53 4f 46 54  0d 0d 41 4c  1985 BY KINGSOFT..AL
 +
>C:7150  4c 20 52 49  47 48 54 53  20 52 45 53  45 52 56 45  44 0d 0d 43  L RIGHTS RESERVED..C
 +
>C:7164  4f 50 59 49  4e 47 20 49  53 20 56 49  4f 4c 41 54  49 4f 4e 20  OPYING IS VIOLATION
 +
>C:7178  4f 46 20 4c  41 57 ff a7
 +
 +
.C:7223  A5 BA      LDA $BA
 +
.C:7225  20 0C ED    JSR $ED0C -> LISTEN
 +
.C:7228  A9 6F      LDA #$6F
 +
.C:722a  20 B9 ED    JSR $EDB9 -> Set Secondary Adress LISTEN
 +
.C:722d  A0 00      LDY #$00
 +
.C:722f  B9 3D 72    LDA $723D,Y
 +
.C:7232  20 DD ED    JSR $EDDD -> send $23 bytes to floppy
 +
.C:7235  C8          INY
 +
.C:7236  C0 23      CPY #$23
 +
.C:7238  90 F5      BCC $722F
 +
.C:723a  4C FE ED    JMP $EDFE -> UNLISTEN
 +
 +
.C:7260  A0 57      LDY #$57
 +
.C:7262  A9 00      LDA #$00
 +
.C:7264  99 00 02    STA $0200,Y
 +
.C:7267  99 A6 02    STA $02A6,Y
 +
.C:726a  88          DEY
 +
.C:726b  10 F7      BPL $7264
 +
.C:726d  A9 09      LDA #$09
 +
.C:726f  8D 16 03    STA $0316
 +
.C:7272  A9 80      LDA #$80
 +
.C:7274  8D 17 03    STA $0317
 +
.C:7277  60          RTS
 +
</nowiki>

Latest revision as of 22:51, 2 March 2026

mobygames link

Source 1

Property Data
Title Frankie crashed on Jupiter
Publisher and/or Developer Kingsoft GmbH
Year 1985
Disk(s) 1
Number of Index Holes ?
Media Type 5.25 DSDD
Retail, Budget or Compilation (with name) Retail
Country of Release DE
Language(s) English
Platform C64
NTSC or PAL PAL
Protection From C64 Preservation Project: Protection reads the track 1, sector 20 data block at a non-standard density (%00 instead of %11). (LordCrass)
Working? Yes
Archived ?
Verified by parser

G64

File:Frankie crashed on Jupiter (Kingsoft) (1985) (original) -PAL- -NTSC- -working- -unpatched-.g64

Source 2

Property Data
Title Frankie crashed on Jupiter
Publisher and/or Developer Kingsoft GmbH
Year 1985
Disk(s) 1
Number of Index Holes 2
Media Type 5.25 DSDD
Retail, Budget or Compilation (with name) Retail
Country of Release DE
Language(s) English
Platform C64
NTSC or PAL PAL
Protection Track 1 Sector 20 has data block (after header) in speed 0, additionally there is a signature on track 18
Working? Yes
Archived 13 Dec 2025 enigma, provided by @rndt@F64
Verified by enigma

Streams

File:Streams Kingsoft FrankieCrashedOnJupiter arndt.zip

P64

File:Kingsoft FrankieCrashedOnJupiter arndt s0.p64

G64

File:Kingsoft FrankieCrashedOnJupiter arndt s0.g64

Disk side 1 is empty.

Protection Analysis

Summary

Floppy

  • Seek to track 1 sector 20
  • read header
  • switch speedzone to 0
  • wait until byte is ready in shift register - drop this, then read 256 raw bytes to buffer
  • decode buffer from GCR to $CC usable bytes
  • return OK

C64

  • Read $80 bytes from floppy buffer to RAM
  • Sum up the first $70 bytes and compare to hard coded checksum (must be $2AC1)
  • Reset if invalid

Details

Floppy code:

.8:0300  4C BC 01    JMP $01BC
.8:0303  A9 01       LDA #$01 // buffer 0 track 1
.8:0305  85 06       STA $06
.8:0307  A9 14       LDA #$14 // buffer 0 sector 20
.8:0309  85 07       STA $07
.8:030b  A9 B0       LDA #$B0 // Job: SEEK
.8:030d  85 00       STA $00
.8:030f  A5 00       LDA $00
.8:0311  30 FC       BMI $030F // wait until done
.8:0313  C9 01       CMP #$01
.8:0315  D0 F4       BNE $030B // wait until OK
.8:0317  A0 2C       LDY #$2C
.8:0319  B9 25 03    LDA $0325,Y // copy routine from 0325 -> 01BC
.8:031c  99 BC 01    STA $01BC,Y
.8:031f  88          DEY
.8:0320  10 F7       BPL $0319
.8:0322  4C E0 01    JMP $01E0 // then jump to 01E0
.8:0325  20 0A F5    JSR $F50A // this code and below is copied to 01bc
.8:0328  AD 00 1C    LDA $1C00
(8:$032b) see below for the copied routine
.8:032b  49 60       EOR #$60
.8:032d  8D 00 1C    STA $1C00
.8:0330  50 FE       BVC $0330
.8:0332  B8          CLV
.8:0333  AD 01 1C    LDA $1C01
.8:0336  91 30       STA ($30),Y
.8:0338  C8          INY
.8:0339  D0 F5       BNE $0330
.8:033b  20 E0 F8    JSR $F8E0
.8:033e  AD 00 1C    LDA $1C00
.8:0341  49 60       EOR #$60
.8:0343  8D 00 1C    STA $1C00
.8:0346  4C 05 F5    JMP $F505
.8:0349  A9 E0       LDA #$E0
.8:034b  85 00       STA $00
.8:034d  A5 00       LDA $00
.8:034f  30 FC       BMI $034D
.8:0351  60          RTS

Copied routine:
.8:01bc  20 0A F5    JSR $F50A -> read block header and wait for sync
.8:01bf  AD 00 1C    LDA $1C00
.8:01c2  49 60       EOR #$60
.8:01c4  8D 00 1C    STA $1C00 -> 1C Motor On, Led On, Write Protect Sense On, Speedzone 0
.8:01c7  50 FE       BVC $01C7 -> wait for full byte
.8:01c9  B8          CLV
.8:01ca  AD 01 1C    LDA $1C01   -> read byte
.8:01cd  91 30       STA ($30),Y -> write to $0300
.8:01cf  C8          INY
.8:01d0  D0 F5       BNE $01C7 -> 256 bytes
.8:01d2  20 E0 F8    JSR $F8E0 -> Decode 255 GCR bytes to 204 BIN bytes, then the last byte from the previous buffer with 64 GCR bytes from $01BA
                                  for the remaining 52 BIN bytes
                                  At $01BA is in that case no senseful data loaded. Later only the first $70 bytes are evaluated.
.8:01d5  AD 00 1C    LDA $1C00 -> 03
.8:01d8  49 60       EOR #$60
.8:01da  8D 00 1C    STA $1C00 -> FC
.8:01dd  4C 05 F5    JMP $F505 -> set "OK" error message -> CODE ENDS HERE when OK, then C64 reads floppy memory, see code below
.8:01e0  A9 E0       LDA #$E0  -> execute program in $0300 -> From $0322
.8:01e2  85 00       STA $00  -> Job starts execution at $0300, where a jump jumps to $01BC
.8:01e4  A5 00       LDA $00
(8:$01e6) d
.8:01e6  30 FC       BMI $01E4 -> wait for program
.8:01e8  60          RTS

Raw bytes read to buffer at 0300:
>8:0300  55 f4 a5 57  79 95 ae bc  e5 4a ea 92  95 aa b7 6a  77 95 ea eb  ce 54 a4 e5   U..Wy....J.....jw....T..
>8:0318  a9 6a 95 de  aa af 73 54  a4 e7 4a 52  b2 9c e5 4a  ba da 9e aa  ba 73 7c dc   .j....sT..JR...J.....s|.
>8:0330  fb 3d 4f 9f  54 d7 73 4d  5a 9c a9 af  cc af b6 aa  f2 6b 92 bf  69 4a 52 a4   .=O.T.sMZ........k..iJR.
>8:0348  97 4e 59 92  a6 b9 e6 69  9b e4 a7 49  f9 92 9d b7  65 de 75 df  37 55 d6 7b   .NY....i...I....e.u.7U.{
>8:0360  95 d5 75 cb  73 5c d9 29  f2 76 5d 77  25 ee 7c e4  a7 c9 cf 7c  dc f7 c9 f6   ..u.s\.).v]w%.|....|....
>8:0378  73 dc e5 75  5d 74 dd 57  a9 f9 76 5d  e7 5e 4a 76  5f 39 29 f6  76 5d 57 35   s..u]t.W..v].^Jv_9).v]W5
>8:0390  cb 7b 9d 97  55 de 92 9d  57 5a 4a 73  5c b7 dd 5f  d5 dd ee ae  ea ea ae ae   .{..U...WZJs\.._........
>8:03a8  ea ae d7 5d  56 f5 bd dd  5d 5d 57 75  75 55 6a ab  ae b5 d5 55  d5 55 dd be   ...]V...]]WuuUj....U.U..
>8:03c0  ea fa aa ae  d5 57 55 56  bb b5 aa ea  ea eb 6d b7  6e aa aa aa  aa aa aa bb   .....WUV......m.n.......
>8:03d8  aa aa aa aa  d5 55 55 55  55 55 55 55  77 55 55 55  55 aa aa aa  ab 55 55 55   .....UUUUUUUwUUUU....UUU
>8:03f0  55 dd 55 55  55 dd 55 55  55 57 5d d7  57 aa aa aa 

After GCR decode, (message starts at 0338)
>8:0300  a0 0f b9 26  71 99 00 d0  88 10 f7 c8  b9 1a 71 99  00 89 c8 c0  0d d0 f5 4c   ...&q.........q........L
>8:0318  00 89 a0 00  98 99 00 71  c8 d0 fa 4c  ec 9e 9d 8e  5f 8f b3 8f  c8 90 c5 92   .......q...L...._.......
>8:0330  7b c0 72 c4  81 ea 00 00  28 43 29 20  31 39 38 35  20 42 59 20  4b 49 4e 47   {.r.....(C) 1985 BY KING
>8:0348  53 4f 46 54  0d 0d 41 4c  4c 20 52 49  47 48 54 53  20 52 45 53  45 52 56 45   SOFT..ALL RIGHTS RESERVE
>8:0360  44 0d 0d 43  4f 50 59 49  4e 47 20 49  53 20 56 49  4f 4c 41 54  49 4f 4e 20   D..COPYING IS VIOLATION
>8:0378  4f 46 20 4c  41 57 ff a7  4e d1 70 d0  70 da f4 ad  4f cd cd bf  4f af bf 4f   OF LAW..N.p.p...O...O..O
>8:0390  06 f0 d4 67  0f 1f 0f b6  ff fe f0 fb  0f 4f 06 74  aa fa 70 dc  6b 4b f0 f0   ...g.........O.t..p.kK..
>8:03a8  f0 f0 f0 74  f0 f0 f0 af  0f 0f 0f 0f  0f 0d af 0f  0f 10 f0 f0  ff 0f 0f 07   ...t....................
>8:03c0  4f 0f 0f bf  0f 0f 07 17  1f 50 f0 f0  00 ff ff e6  ff ff ff ff  ff ff ff ff   O........P..............
>8:03d8  ff ff ff ff  ff ff ff ff  ff ff ff ff  ff ff ff ff  ff 1d c8 ff  ff ff ff ff   ........................
>8:03f0  ff ff 00 00  00 00 00 00  00 00 00 00  00 00 00 00 

Decoded program part at 0300, not executed by floppy but later read to C64 memory at $7100:

.8:0300  A0 0F       LDY #$0F
.8:0302  B9 26 71    LDA $7126,Y
.8:0305  99 00 D0    STA $D000,Y
.8:0308  88          DEY
.8:0309  10 F7       BPL $0302
.8:030b  C8          INY
.8:030c  B9 1A 71    LDA $711A,Y
.8:030f  99 00 89    STA $8900,Y
.8:0312  C8          INY
.8:0313  C0 0D       CPY #$0D
.8:0315  D0 F5       BNE $030C
.8:0317  4C 00 89    JMP $8900
.8:031a  A0 00       LDY #$00
.8:031c  98          TYA
.8:031d  99 00 71    STA $7100,Y
.8:0320  C8          INY
.8:0321  D0 FA       BNE $031D
.8:0323  4C EC 9E    JMP $9EEC

C64 routine reads floppy memory from 0300:
128 bytes to $7100

.C:707a  A5 BA       LDA $BA
.C:707c  20 09 ED    JSR $ED09 -> TALK
.C:707f  A9 6F       LDA #$6F
.C:7081  20 C7 ED    JSR $EDC7 -> Set Secondary Adress TALK
.C:7084  A2 00       LDX #$00
.C:7086  20 13 EE    JSR $EE13 -> Get Char from serial bus
.C:7089  9D 00 71    STA $7100,X
.C:708c  E8          INX
.C:708d  10 F7       BPL $7086
.C:708f  20 EF ED    JSR $EDEF -> Untalk
.C:7092  A0 00       LDY #$00
.C:7094  4C EE 70    JMP $70EE -> fill memory at $7000

.C:70ee  98          TYA        -> from $7094 fill 7000-70F0 with 00
.C:70ef  99 00 70    STA $7000,Y
.C:70f2  C8          INY
.C:70f3  C0 F0       CPY #$F0
.C:70f5  90 F8       BCC $70EF
.C:70f7  20 60 72    JSR $7260
.C:70fa  20 23 72    JSR $7223
.C:70fd  4C 00 72    JMP $7200 -> Check protection signature with a checksum

Evaluation of data read from floppy, checks if sum is 2AC1
.C:7200  A2 6F       LDX #$6F -> calculate some checksum from 70 bytes at 7100-716F
.C:7202  A9 00       LDA #$00 A = 0, Y = 0
.C:7204  A8          TAY
.C:7205  18          CLC
.C:7206  7D 00 71    ADC $7100,X A += MEM
.C:7209  9A          TXS         Save X
.C:720a  AA          TAX         X = A
.C:720b  98          TYA         A = Y
.C:720c  69 00       ADC #$00    A += carry // carrys are summed in Y
.C:720e  A8          TAY         Y = A
.C:720f  8A          TXA         A = X
.C:7210  BA          TSX         Restore X
.C:7211  CA          DEX
.C:7212  10 F1       BPL $7205
.C:7214  9A          TXS
.C:7215  C0 2A       CPY #$2A   Y == 2A ?
.C:7217  D0 07       BNE $7220
.C:7219  C9 C1       CMP #$C1 -> A == C1 ?
.C:721b  D0 03       BNE $7220
.C:721d  4C 00 71    JMP $7100 -> OK?
.C:7220  4C 09 80    JMP $8009 -> error?

Bytes at 7100
>C:7100  a0 0f b9 26  71 99 00 d0  88 10 f7 c8  b9 1a 71 99  00 89 c8 c0   ...&q.........q.....
>C:7114  0d d0 f5 4c  00 89 a0 00  98 99 00 71  c8 d0 fa 4c  ec 9e 9d 8e   ...L.......q...L....
>C:7128  5f 8f b3 8f  c8 90 c5 92  7b c0 72 c4  81 ea 00 00  28 43 29 20   _.......{.r.....(C)
>C:713c  31 39 38 35  20 42 59 20  4b 49 4e 47  53 4f 46 54  0d 0d 41 4c   1985 BY KINGSOFT..AL
>C:7150  4c 20 52 49  47 48 54 53  20 52 45 53  45 52 56 45  44 0d 0d 43   L RIGHTS RESERVED..C
>C:7164  4f 50 59 49  4e 47 20 49  53 20 56 49  4f 4c 41 54  49 4f 4e 20   OPYING IS VIOLATION
>C:7178  4f 46 20 4c  41 57 ff a7

.C:7223  A5 BA       LDA $BA
.C:7225  20 0C ED    JSR $ED0C -> LISTEN
.C:7228  A9 6F       LDA #$6F
.C:722a  20 B9 ED    JSR $EDB9 -> Set Secondary Adress LISTEN
.C:722d  A0 00       LDY #$00
.C:722f  B9 3D 72    LDA $723D,Y 
.C:7232  20 DD ED    JSR $EDDD -> send $23 bytes to floppy
.C:7235  C8          INY
.C:7236  C0 23       CPY #$23
.C:7238  90 F5       BCC $722F
.C:723a  4C FE ED    JMP $EDFE -> UNLISTEN

.C:7260  A0 57       LDY #$57
.C:7262  A9 00       LDA #$00
.C:7264  99 00 02    STA $0200,Y
.C:7267  99 A6 02    STA $02A6,Y
.C:726a  88          DEY
.C:726b  10 F7       BPL $7264
.C:726d  A9 09       LDA #$09
.C:726f  8D 16 03    STA $0316
.C:7272  A9 80       LDA #$80
.C:7274  8D 17 03    STA $0317
.C:7277  60          RTS