Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.129 - CLIENT : 54.80.157.133

 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 

Drol (Broderbund, 1983)

 
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
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Mer 01 Nov 2017, 20:06    Sujet du message: Drol (Broderbund, 1983) Répondre en citant

Drol is a very popular run-and-shoot game. Rescue the children and their pets, and finally the mother, too. You'll need strategy as well as skill to avoid all kinds of enemies. Let's go.

The disk is a hybrid 13/16 sector booter. The 16-sector bootsector looks like this:

Code:
0800    .BYTE   $01
0801    LDX     #$00
0803    LDA     $800,X
0806    STA     $200,X
0809    INX
080A    BNE     $0803
080C    JMP     $020F


Copy self to $200 and resume execution from there.

Code:
080F    LDY     #$AB
0811    TYA
0812    STA     $3C
0814    LSR
0815    ORA     $3C
0817    CMP     #$FF
0819    BNE     $0824
081B    CPY     #$D5
081D    BEQ     $0824
081F    TXA
0820    STA     $0800,Y
0823    INX
0824    INY
0825    BNE     $0811


Build 5-and-3 decoder table at $800.

Code:
0827    STY     $3D
0829    STY     $26
082B    LDA     #$03
082D    STA     $27
082F    LDX     $2B
0831    JSR     $025D
0834    JSR     $02D1
0837    JMP     $0301


Read and decode sector the 5-and-3 encoded sector 0 to $0300, the resume at $0301.

Code:
0301    STY    $48
0303    LDY    #$00
0305    TYA
0306    LDX    #$20
0308    STA    $4000,Y
030B    INY
030C    BNE    $0308
030E    INC    $030A
0311    DEX
0312    BNE    $0308
0314    LDA    $C057
0317    LDA    $C052
031A    LDA    $C055
031D    LDA    $C050


Erase and display graphics screen 2.

Code:
0320    LDA    $300,Y
0323    EOR    $48
0325    STA    $100,Y
0328    INY
0329    BNE    $0320
032B    LDX    #$CF
032D    TXS
032E    RTS


Decode data and store it directly on the stack, then run it. The key is stored at $48 and comes as a side-effect from the 5-and-3 decoder code. The value is #$99.

The entrypoint for the stack code is here:

Code:
01D0    .WORD $012F


and it looks like this:

Code:
0130    LDX    #$04
0132    STX    $86
0134    LDY    #$00
0136    STY    $83
0138    STX    $84
013A    LDX    $2B
013C    LDA    $C08C,X
013F    BPL    $013C
0141    CMP    #$BF
0143    BNE    $013C
0145    LDA    $C08C,X
0148    BPL    $0145
014A    CMP    #$D7
014C    BNE    $0141
014E    LDA    $C08C,X
0151    BPL    $014E
0153    CMP    #$D5
0155    BNE    $014A
0157    LDA    $C08C,X
015A    BPL    $0157
015C    ROL
015D    STA    $85
015F    LDA    $C08C,X
0162    BPL    $015F
0164    AND    $85
0166    STA    ($83),Y
0168    INY
0169    BNE    $0157
016B    ASL    $C000
016E    LDA    $C08C,X
0171    BPL    $016E
0173    CMP    #$D4
0175    BNE    $0130
0177    INC    $84
0179    DEC    $86
017B    BNE    $0157
017D    RTS


So we have a 4-and-4 decoder, using #$BF #$D7 #$D5 as the data prologue (no address prologue!), and #$D4 as epilogue (no checksum!), reading a single 4-page sector into $0400-07FF. Then the RTS fetches the next address from the stack:

Code:
01D2    .WORD $03FF


So we continue at $0400.

Code:
0400    LDY    #$00
0402    LDA    $0600,Y
0405    STA    $BE00,Y
0408    LDA    $0700,Y
040B    STA    $BF00,Y
040E    INY
040F    BNE    $0402


Copy self to $BE00-BFFF for later.

Code:
0411    LDX    $2B
0413    STX    $BF49
0416    JSR    $BEE0
0419    LDA    $C083
041C    LDA    $C083
041F    LDY    #$00
0421    LDA    #$BF
0423    STY    $FFFC
0426    STA    $FFFD
0429    STY    $03F2
042C    STA    $03F3
042F    LDY    #$03
0431    STY    $03F0
0434    STA    $03F1
0437    STY    $36
0439    STA    $37
043B    STY    $38
043D    STA    $39
043F    EOR    #$A5
0441    STA    $03F4


Hook all interesting vectors to point to reboot code.

Code:
0444    TSX
0445    TXS
0446    INX
0447    TSX
0448    TXS
0449    INX
044A    TSX
044B    TXS
044C    INX
044D    TSX
044E    RTS


This does nothing but RTS. If you look carefully, you'll see that the stack pointer is read but not written, so our next point:

Code:
01D4    .WORD $04FF


takes us here:

Code:
0500    LDY    #$00
0502    LDX    #$20
0504    TYA
0505    STA    $2000,Y
0508    INY
0509    BNE    $0505
050B    INC    $0507
050E    DEX
050F    BNE    $0505
0511    BIT    $C054


Erase and display graphics screen 1.

Code:
0514    LDA    #$02
0516    JMP    $0540


Seek to track 1, and return again, so our next point:

Code:
01D6    .WORD $044F


takes us here:

Code:
0450    TSX
0451    TXA
0452    CLC
0453    ADC    #$28
0455    TAX
0456    TXS


Change the stack pointer to the top of the stack.

Code:
0457    LDX    #$00
0459    LDY    $BF49
045C    LDA    $C08C,Y
045F    BPL    $045C
0461    CMP    #$DF
0463    BNE    $045C
0465    NOP
0466    LDA    $C08C,Y
0469    BPL    $0466
046B    CMP    #$DE
046D    BNE    $045C
046F    NOP
0470    LDA    $C08C,Y
0473    BPL    $0470
0475    CMP    #$DD
0477    BNE    $045C
0479    NOP
047A    LDA    $C08C,Y
047D    BPL    $047A
047F    SEC
0480    ROL
0481    STA    $00
0483    LDA    $C08C,Y
0486    BPL    $0483
0488    AND    $00
048A    PHA
048B    DEX
048C    BNE    $047A
048E    LDA    $C08C,Y
0491    BPL    $048E
0493    CMP    #$D5
0495    BNE    $045C
0497    RTS


Another 4-and-4 decoder, using #$DF #$DE #$DD as the data prologue (no address prologue), and #$D5 as epilogue (no checksum), reading 1 sector directly into the stack, and then running that code.

Our next point:

Code:
0100    .WORD $017F


takes us here:

Code:
0180    LDA    $C08C,Y
0183    BPL    $0180
0185    CMP    #$D5
0187    BNE    $0180
0189    NOP
018A    LDA    $C08C,Y
018D    BPL    $018A
018F    CMP    #$AA
0191    BNE    $0180
0193    NOP
0194    LDA    $C08C,Y
0197    BPL    $0194
0199    CMP    #$B5
019B    BNE    $0180
019D    NOP
019E    LDA    $C08C,Y
01A1    BPL    $019E
01A3    SEC
01A4    ROL
01A5    STA    $01FF
01A8    LDA    $C08C,Y
01AB    BPL    $01A8
01AD    AND    $01FF
01B0    STA    $00,X
01B2    INX
01B3    BNE    $019D
01B5    LDA    $C08C,Y
01B8    BPL    $01B5
01BA    CMP    #$D4
01BC    BNE    $0180


Another 4-and-4 decoder, using #$D5 #$AA #$B5 as the data prologue (no address prologue), and #$D4 as epilogue (no checksum), reading 1 sector directly into the zpage, and then running from the next location on the stack.

Our next point:

Code:
01BE    LDA    #$08
01C0    RTS


combined with this:

Code:
0102    .WORD $053F


performs a seek to track 4, and then runs from the next location on the stack.

Our next point:

Code:
0104    .WORD $BE0C


takes us here:

Code:
BE0D    LDX    $BF49
BE10    LDA    #$04
BE12    STA    $A1
BE14    LDY    #$00
BE16    LDA    #$5C
BE18    STY    $A2
BE1A    STA    $A3
BE1C    LDA    $C08C,X
BE1F    BPL    $BE1C
BE21    CMP    #$B5
BE23    BNE    $BE1C
BE25    LDA    $C08C,X
BE28    BPL    $BE25
BE2A    CMP    #$B6
BE2C    BNE    $BE21
BE2E    LDA    $C08C,X
BE31    BPL    $BE2E
BE33    CMP    #$B7
BE35    BNE    $BE2A
BE37    LDA    $C08C,X
BE3A    BPL    $BE37
BE3C    ROL
BE3D    STA    $A0
BE3F    LDA    $C08C,X
BE42    BPL    $BE3F
BE44    AND    $A0
BE46    STA    ($A2),Y
BE48    INY
BE49    BNE    $BE37
BE4B    ASL    $FFFF
BE4E    LDA    $C08C,X
BE51    BPL    $BE4E
BE53    CMP    #$D4
BE55    BNE    $BE10
BE57    INC    $A3
BE59    DEC    $A1
BE5B    BNE    $BE37
BE5D    JMP    $BEA0
...
BEA0    JSR    $5C00


Another 4-and-4 decoder, using #$B5 #$B6 #$B7 as the data prologue (no address prologue), and #$D4 as epilogue (no checksum), reading a single 4-page sector into $5C00-5FFF, and then running it.

That takes us here:

Code:
5C00    LDA    #$04
5C02    JSR    $5F00
5C05    LDA    #$00
5C07    STA    $E1
5C09    JSR    $5E00
5C0C    JMP    $5000
...
5E00    LDY    #$00
5E02    LDA    #$50
5E04    STY    $E2
5E06    PHA
5E07    JSR    $5E30
5E0A    LDY    $E2
5E0C    CLC
5E0D    LDA    $BF48
5E10    ADC    $5E28,Y
5E13    JSR    $5F03
5E16    PLA
5E17    CLC
5E18    ADC    #$02
5E1A    LDY    $E2
5E1C    INY
5E1D    CPY    #$04
5E1F    BCC    $5E04
5E21    RTS
...
5E28    .BYTE    $01,$FF,$01,00


Seek to track 2, read four 2-page sectors to $5000-57FF, while alternating between track 2 and 2.25, and then run it.

The read routine:

Code:
5E30    PHA
5E31    LDA    $E1
5E33    AND    #$07
5E35    TAY
5E36    LDA    $5E50,Y
5E39    STA    $90
5E3B    LDA    $E1
5E3D    LSR
5E3E    ORA    #$AA
5E40    STA    $91
5E42    LDA    $E1
5E44    ORA    #$AA
5E46    STA    $92
5E48    PLA
5E49    INC    $E1
5E4B    JMP    $5E60
...
5E50    .BYTE $D5, $B5, $B7, $BC, $DF, $D4, $B4, $DB
...
5E60    STA    $94
5E62    LDX    #$02
5E64    STX    $97
5E66    LDY    #$00
5E68    LDA    $94
5E6A    STY    $95
5E6C    STA    $96
5E6E    LDX    $BF49
5E71    LDA    $C08C,X
5E74    BPL    $5E71
5E76    CMP    $90
5E78    BNE    $5E71
5E7A    LDA    $C08C,X
5E7D    BPL    $5E7A
5E7F    CMP    $91
5E81    BNE    $5E76
5E83    LDA    $C08C,X
5E86    BPL    $5E83
5E88    CMP    $92
5E8A    BNE    $5E7F
5E8C    LDA    $C08C,X
5E8F    BPL    $5E8C
5E91    ROL
5E92    STA    $98
5E94    LDA    $C08C,X
5E97    BPL    $5E94
5E99    AND    $98
5E9B    STA    ($95),Y
5E9D    INY
5E9E    BNE    $5E8C
5EA0    ASL    $FFFF
5EA3    LDA    $C08C,X
5EA6    BPL    $5EA3
5EA8    CMP    #$D4
5EAA    BNE    $5E62
5EAC    INC    $96
5EAE    DEC    $97
5EB0    BNE    $5E8C
5EB2    RTS


Another 4-and-4 decoder, but the data prologue changes per-sector, and #$D4 as epilogue. It looks like the intention was to have eight different prologues, but because the sectors are twice the size, only the first four are used.

Our next point:

Code:
5000    LDX    $BF4A
5003    BPL    $5008
5005    JMP    $5300


Checking if the main code has been loaded, and jumping to $5300 if not, to load it.
Otherwise we go here:

Code:
5008    INX
5009    TXA
500A    AND    #$03
500C    TAX
500D    BIT    $44
500F    BMI    $5013
5011    LDX    #$00
5013    STX    $BF4A
5016    LDY    $50F0,X
5019    LDA    #$14
501B    JSR    $5500
501E    LDX    $BF4A
5021    LDY    #$40
5023    LDA    $50F8,X
5026    JSR    $5500
5029    LDA    #$08
502B    JSR    $5700
502E    LDA    $C088,X
5031    RTS


So we have a table-based loader for all of the other tracks. It means that we can use the disk's own RWTS to read the rest of the disk! We can start at track 5 and read all of the tracks. That will include the game code and all levels.

The read routine:

Code:
5500    PHA
5501    STY    $88
5503    JSR    $5700
5506    LDX    #$00
5508    LDY    $88
550A    LDA    $5400,Y
550D    STA    $5703,X
5510    INY
5511    INX
5512    CPX    #$0C
5514    BCC    $550A
5516    JSR    $5530
5519    LDA    $88
551B    CLC
551C    ADC    #$0C
551E    TAY
551F    LDA    $5400,Y
5522    BEQ    $552B
5524    PLA
5525    CLC
5526    ADC    #$02
5528    BNE    $5500
...
5530    LDA     $BF48
5533    LSR
5534    LDX     #$03
5536    AND     #$0F
5538    TAY
5539    LDA     $5610,Y
553C    STA     $A0,X
553E    INY
553F    TYA
5540    DEX
5541    BPL     $5536
5543    JMP     $570F
...
5610    .BYTE $FD, $F7, $F6, $F5
5614    .BYTE $EF, $EE, $ED, $EA
5618    .BYTE $DE, $DB, $D7, $D6
561C    .BYTE $BF, $BA, $AF, $AA


12 "sectors" per track, like Karateka, with prologue/epilogue sequences that change every four tracks.

Code:
570F    LDX    #$0C
5711    STX    $A4
5713    LDY    #$00
5715    STY    $5757
5718    STY    $A5
571A    LDX    $BF49
571D    LDA    $C08C,X
5720    BPL    $571D
5722    CMP    $A0
5724    BNE    $571D
5726    LDA    $C08C,X
5729    BPL    $5726
572B    CMP    $A1
572D    BNE    $571D
572F    LDA    $C08C,X
5732    BPL    $572F
5734    CMP    $A2
5736    BNE    $571D
5738    LDY    $A5
573A    LDA    $5703,Y
573D    STA    $5758
5740    INC    $A5
5742    LDY    $C08C,X
5745    BPL    $5742
5747    LDA    $5600,Y
574A    ASL
574B    ASL
574C    ASL
574D    ASL
574E    LDY    $C08C,X
5751    BPL    $574E
5753    ORA    $5600,Y
5756    STA      $FF00
5759    INC    $5757
575C    BNE    $5742
575E    INC    $5758
5761    LDA    $C08C,X
5764    BPL    $5761
5766    CMP    $A3
5768    BNE    $570F
576A    DEC    $A4
576C    BNE    $5738
576E    RTS


Using yet another 4-and-4 decoder, a single 12-page sector, which is decoded to 12 different addresses.

The track is relatively easy at that point. We can capture the zpage, and then ignore everything else until the RWTS is loaded.
The entire game is loaded from these regular tracks. We can fit a new RWTS at $BE00 by using the boot PROM to read the sectors for us.
Then we write them to a regular DOS disk occupying only 12 of the 16 sectors to avoid changing the code.
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: 2893
Localisation: Le Chesnay, France

MessagePosté le: Dim 05 Nov 2017, 16:42    Sujet du message: Répondre en citant

To capture, here is what I wrote in 2015 for Drol:

Code:

*
* Drol
* (c) 1983, Broderbund
* (k) 2015, LoGo
*

* Stage 3 - Get all!

         mx    %11
         org   $1000
         lst   off

ptrSTACK =     $2000
ptrZP    =     $2800
ptrTRACK =     $3000
zpPHASE  =     $ff

*---------- Some jumps

         lst   on
         jmp   initSLOT   ; turn drive on
         jmp   moveARM    ; move arm
         jmp   nextPHASE  ; move to next track
         jmp   readSTACK  ; read stack
         jmp   readZP     ; read zero page
         jmp   read5C     ; read 5C00
         jmp   readTRACK  ; read a track
         jmp   copyDISK   ; copy $C 4*4 sec on drive 2
         lst   off

*----------

initSLOT ldx   #$60       ; slot 6
         stx   LBF49

         lda   #0         ; phase 0
         sta   zpPHASE

         lda   $c089,x
         rts

*----------

readSTACK =    *

         LDX   #$00       ; load data
         LDY   LBF49

L045C    lda   $c000
         bpl   L045D
         sta   $c010
         rts

L045D    LDA   $C08C,Y
         BPL   L045D
         CMP   #$DF
         BNE   L045C
         NOP
L0466    LDA   $C08C,Y
         BPL   L0466
         CMP   #$DE
         BNE   L045C
         NOP
L0470    LDA   $C08C,Y
         BPL   L0470
         CMP   #$DD
         BNE   L045C
         NOP
L047A    LDA   $C08C,Y    ; 4*4 encoded nibbles
         BPL   L047A
         SEC
         ROL
         STA   $00
L0483    LDA   $C08C,Y
         BPL   L0483
         AND   $00

* PHA
         sta   ptrSTACK,x ; and store in my buffer!!

         DEX
         BNE   L047A
L048E    LDA   $C08C,Y
         BPL   L048E
         CMP   #$D5
         BNE   L045C
         RTS

         ds    \

*----------

readZP   =     *

         LDX   #$00       ; load data
         LDY   LBF49

L0181    lda   $c000
         bpl   L0182
         sta   $c010
         rts

L0182    LDA   $C08C,Y    ; Read nibbles
         BPL   L0182
         CMP   #$D5
         BNE   L0181
         NOP
L018B    LDA   $C08C,Y
         BPL   L018B
         CMP   #$AA
         BNE   L0181
         NOP
L0195    LDA   $C08C,Y
         BPL   L0195
         CMP   #$B5
         BNE   L0181
L019E    NOP
L019F    LDA   $C08C,Y    ; 4*4 encoded
         BPL   L019F
         SEC
         ROL
         STA   L01FF
L01A9    LDA   $C08C,Y
         BPL   L01A9
         AND   L01FF

* STA $00,X ; Save in zero page
         sta   ptrZP,x    ; and store in my buffer!!

         INX
         BNE   L019E
L01B6    LDA   $C08C,Y
         BPL   L01B6
         CMP   #$D4
         BNE   L0181
* LDA #$08
         RTS

L01FF    ds    1

         ds    \

*----------

moveARM  =     *

         LDA   zpPHASE    ; move arm to phase 2

L0540    LDX   #$13       ; std timing for track 2 track
         HEX   2C
         LDX   #$0A       ; timing for half-track
         STX   L05AD+1
         STA   L05D0
         CMP   LBF48
         BEQ   L05A9
         LDA   #$00
         STA   L05D0+1
L0555    LDA   LBF48
         STA   L05D0+2
         SEC
         SBC   L05D0
         BEQ   L0598
         BCS   L056A
         EOR   #$FF
         INC   LBF48
         BCC   L056F
L056A    ADC   #$FE
         DEC   LBF48
L056F    CMP   L05D0+1
         BCC   L0577
         LDA   L05D0+1
L0577    CMP   #$0C
         BCS   L057C
         TAY
L057C    SEC
         JSR   L059C
         LDA   L05B8,Y
         JSR   L05AD
         LDA   L05D0+2
         CLC
         JSR   L059F
         LDA   L05C4,Y
         JSR   L05AD
         INC   L05D0+1
         BNE   L0555
L0598    JSR   L05AD
         CLC
L059C    LDA   LBF48
L059F    AND   #$03
         ROL
         ORA   LBF49
         TAX
         LDA   $C080,X
L05A9    LDX   LBF49
         RTS

L05AD    LDX   #$13
L05AF    DEX
         BNE   L05AF
         SEC
         SBC   #$01
         BNE   L05AD
         RTS

L05B8    HEX   01302824201E1D1C1C1C1C1C
L05C4    HEX   702C26221F1E1D1C1C1C1C1C

L05D0    DS    3

*---

nextPHASE inc  zpPHASE
         inc   zpPHASE
         rts

         ds    \

*--- The RWTS

read5C   =     *

         LDX   LBF49
LBE10    LDA   #$04       ; load 4 pages
         STA   $A1
         LDY   #$00       ; at $5C00
         LDA   #$5C
         STY   $A2
         STA   $A3

LBE1C    lda   $c000
         bpl   LBE1D
         sta   $c010
         rts

LBE1D    LDA   $C08C,X
         BPL   LBE1D
LBE21    CMP   #$B5
         BNE   LBE1C
LBE25    LDA   $C08C,X
         BPL   LBE25
LBE2A    CMP   #$B6
         BNE   LBE21
LBE2E    LDA   $C08C,X
         BPL   LBE2E
         CMP   #$B7
         BNE   LBE2A
LBE37    LDA   $C08C,X    ; 4*4 encoded nibbles
         BPL   LBE37
         ROL
         STA   $A0
LBE3F    LDA   $C08C,X
         BPL   LBE3F
         AND   $A0
         STA   ($A2),Y
         INY
         BNE   LBE37

         ASL   $FFFF      ; waste time

LBE4E    LDA   $C08C,X
         BPL   LBE4E
         CMP   #$D4
         BNE   LBE10
         INC   $A3        ; RAM++
         DEC   $A1        ; nbsec--
         BNE   LBE37
         rts

LBF48    DB    $00        ; current phase
LBF49    DB    $60        ; slot*16

         ds    \

*---------- Copy tracks on drive 2 (start at T5)
* from drive 1, track 5-22, $3000..$3BFF
*   to drive 2, track 5-22, $3000..$3BFF

copyDISK =     *

         lda   #10        ; the first phase
         sta   zpPHASE

copyDISK1 jsr  readTRACK  ; moves arm

         lda   zpPHASE    ; track
         lsr
         sta   myIOB+4
         jsr   $fdda      ; write out track

         lda   #0         ; sector
         sta   myIOB+5

         lda   #>ptrTRACK ; pointer
         sta   myIOB+9

]lp      lda   #>myIOB    ; call RWTS
         ldy   #<myIOB
         jsr   $03D9

         inc   myIOB+9
         inc   myIOB+5
         lda   myIOB+5
         cmp   #$0C
         bcc   ]lp

         jsr   nextPHASE

         lda   zpPHASE
         cmp   #$46       ; 23*2
         bcc   copyDISK1
         rts

myIOB    hex   01         ; 00
         hex   60         ; 01
         hex   02         ; 02
         hex   fe         ; 03
         hex   05         ; 04 track
         hex   00         ; 05 sector
         da    myDCT      ; 06 pointer
         da    ptrTRACK   ; 08 buffer
         hex   00         ; 0A
         hex   00         ; 0B
         hex   02         ; 0C write command
         hex   00         ; 0D error code
         hex   00         ; 0E
         hex   60         ; 0F
         hex   02         ; 10

myDCT    hex   0001efd8   ; std DCT

         ds    \

*---------- Read an entire track (start at T5)

readTRACK =    *          ; read an entire track

         lda   zpPHASE
         jsr   moveARM

         LDX   #$00       ; move RAM pointers
L550A    LDA   L5400,X
         STA   L5703,X
         INX
         CPX   #$0C
         BCC   L550A

         LDA   LBF48      ; set the markers
         LSR
         LDX   #$03
]lp      AND   #$0F
         TAY
         LDA   L5610,Y    ; marker list
         STA   $A0,X
         INY
         TYA
         DEX
         BPL   ]lp

*--- Now, read data

L570F    LDX   #$0C       ; we want C sectors
         STX   $A4
         LDY   #$00
         STY   L5756+1
         STY   $A5
         LDX   LBF49      ; BF49
L571D    LDA   $C08C,X
         BPL   L571D
         CMP   $A0
         BNE   L571D
L5726    LDA   $C08C,X
         BPL   L5726
         CMP   $A1
         BNE   L571D
L572F    LDA   $C08C,X
         BPL   L572F
         CMP   $A2
         BNE   L571D
L5738    LDY   $A5        ; RAM pointer
         LDA   L5703,Y
         STA   L5756+2
         INC   $A5
L5742    LDY   $C08C,X
         BPL   L5742
         LDA   L5600,Y
         ASL
         ASL
         ASL
         ASL
L574E    LDY   $C08C,X
         BPL   L574E
         ORA   L5600,Y
L5756    STA   $FF00
         INC   L5756+1
         BNE   L5742
         INC   L5756+2
L5761    LDA   $C08C,X
         BPL   L5761
         CMP   $A3
         BNE   L570F
         DEC   $A4
         BNE   L5738
         RTS

*--- Pointers in RAM, useless

L5400    HEX   303132333435363738393A3B
         HEX   00000000

L5703    HEX   000000000000000000000000

         ds    \

*--- Beautiful table

L5600    HEX   F6EDEBFDDFD6AAF5EFAEF7D5B7EEFAFB

*--- A list of markers
* $A0..$A2 for prolog
* $A3       is epilog

L5610    HEX   EADEDDDBDAD7BFBEBDBBBAB6B5AFADAB

*--- nothing...

         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000

*--- The nibble table

L56AA    HEX   060C000D090B
         HEX   0000000000040D0C0000090200010809
         HEX   00000000000000000000000000000000
         HEX   00000000000B050C0000060C00000604
         HEX   00000000000000000000030200010D08
         HEX   000000000007000A00000E0F00030000
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Lun 06 Nov 2017, 19:49    Sujet du message: Répondre en citant

Here's my tracer. The code at $8600-86F7 (not shown) is the boot PROM.

Code:
86F8    LDA    #$05
86FA    STA    $0838
86FD    LDA    #$87
86FF    STA    $0839
8702    JMP    $0801
8705    LDA    #$4C
8707    STA    $032B
870A    LDA    #$17
870C    STA    $032C
870F    LDA    #$87
8711    STA    $032D
8714    JMP    $0301
8717    LDX    #$D1
8719    TXS
871A    LDA    #$87
871C    PHA
871D    LDA    #$22
871F    PHA
8720    JMP    $0130
8723    LDA    #$4C
8725    STA    $0497
8728    LDA    #$33
872A    STA    $0498
872D    LDA    #$87
872F    STA    $0499
8732    RTS
8733    LDA    #$3E
8735    STA    $BE5E
8738    LDA    #$87
873A    STA    $BE5F
873D    RTS
873E    LDA    #$60
8740    STA    $5C0C
8743    JSR    $5C00
8746    JMP    $FF59


That's it. Then you can

Code:
LDY #$64
LDA #phase
JSR $5500


to read 3 tracks at a time to $9700-BAFF.
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: 2893
Localisation: Le Chesnay, France

MessagePosté le: Lun 06 Nov 2017, 20:18    Sujet du message: Répondre en citant

That is cool!
I've never finished the crack (ie. rewrite the read routines), same unfinished work with Bruce Lee.

av
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 171

MessagePosté le: Mar 07 Nov 2017, 19:33    Sujet du message: Répondre en citant

Yes, to maintain 48kb only, you have only a single page available in which to place the entire RTS. That leaves boot PROM as the only technique that I can see, and some page-swapping code (there are various pages that are free at different times).
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