Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.1 - CLIENT : 35.175.190.77

 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 

Splash IIgs (Sergent Claude, 1987)

 
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: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 01 Juil 2018, 18:14    Sujet du message: Splash IIgs (Sergent Claude, 1987) Répondre en citant

#994 - This is one of the first non-Apple demos for the Apple IIgs and it has a couple of interesting features: it runs once (yes, you can watch the demo only one time), it is protected (yes, you cannot copy it), it contains Speedysmith v1 (El Mathos fast 3.5" disk copier) with two different intro images.

A big thank to Christophe Q. for the original disks. You can watch the demo in action on youtube at https://www.youtube.com/watch?v=g0rb7vg6ASc&t=804s

- Note that you can now press 1 or 2 to boot Speedysmith, no key will load the Splash demo,
- Note that Speedysmith has an internal feature to reset the BRAM parameter that prevents you from booting the demo twice,
- Note that some pics do not display finely, that is due to some read errors on the 30yo original disk,
- Read the texts carefully and tell if it is possible to load the demo more than once.

Protection type
The disk has 1600 blocks. The first 12 blocks are standard ones, the others have a slight variation of a standard one (markers are OK, denibblize table is not and some tempo markers are included). The original routines are included in the thread.
The demo only runs on a ROM 01 IIgs because it uses values of bank $FF that are on ROM 01 only, the ROM 3 has the same data at a different address. And, as the data is the nibble table, that generates a read error on a ROM 3.

The addresses of the bank suggest that you have a 4MB card. If you have less, go to a2heaven.com Smile

Let's boot trace
We'll use the smartport readblock routine to read the first blocks in memory.
Code:

300:20 C50D 01 320 60
320:03 01 800 0 0 0
300G

The original boot1 code is now loaded at $800. After some analysis, we see that the next blocks are loaded at $2400 and above.

Code:

300:A2 50 4C 801
8E5:60
300G

We have called the loader of the next blocks. The LDX #$50 is used to tell that we are booting from slot 5. The RTS at $8E5 prevents from jumping to $2400.

The code at $2400 and above is very tricky, you'll see it afterwards. It patches the internal smartport vectors of bank $E1. It also set values in the BRAM to prevent the demo from running more than once.

Let's have fun
Code:

* Force smartport to point to slot 5
25C1:C50D
2400:AD

* Patch the load table of Speedysmith and tell to load $560 sectors as from $10/0000. The disk will be loaded entirely in memory.
256E:20 E1 40 00 00 09 -> 00 10 60 05 00 00 00 00

* Force the Speedysmith load
2730: 90 07 -> 80 07

* Go to the monitor after the disk is loaded
277A:82 83 E0 -> 4C FF59

* Force the Speedysmith load
0:0001

* Save the smartport vector table
30/C00<E1/C00.FFFM

* And execute the loader
00/
300:18 FB C2 30 4C 2400
300G

* Show text mode
C029:01

* Restore the original smartport vector routines
E1/C00<30/C00.FFFM


You can reboot your IIgs, load the SP.WRITE binary I wrote at $1000, insert a formatted 3.5" disk in the drive and type the following code
Code:

320:03 01 2000 B4 0 0
1000G


You now have a copiable disk of the demo that will not boot as it is not patched. The following thread will also show my rewritten boot1 ($800) and boot2 ($2400) codes.

The disk image is available at http://www.brutaldeluxe.fr/products/underground/sergent%20claude/

Reboot and... enjoy,
LoGo
7/2018


Dernière édition par toinet le Dim 01 Juil 2018, 18:28; é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: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 01 Juil 2018, 18:16    Sujet du message: Répondre en citant

My Splash.Write code to have at $1000 to write the demo onto a standard disk.

Code:

*
* Splash writer
*

*
* The program writes bank $10 onto a 3.5" disk
*

         mx    %00
         org   $1000
         lst   off

*----------

         clc
         xce
         rep   #$30
]lp      ldx   #512-2
loop     ldal  $100000,x
         stal  $002000,x
         dex
         dex
         bpl   loop

         sec
         xce
         sep   #$30

* $320: 03
*     : 01
*     : 2000
*     : 000000 block

         jsr   $c50d
         dfb   $02
         da    $0320

         jsr   $fdda      ; output error code

         clc
         xce
         rep   #$30

         lda   loop+2
         clc
         adc   #2
         sta   loop+2

         lda   $320+4
         inc
         sta   $320+4
         cmp   #1600      ; $640
         bcc   ]lp

         sec
         xce
         sep   #$30
         rts


Dernière édition par toinet le Dim 01 Juil 2018, 20:26; é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: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 01 Juil 2018, 18:16    Sujet du message: Répondre en citant

The original boot1 code at $800

Code:

*
* Splash
* (c) 1987, Sergent Claude
* (k) 2018, LoGo
*
* Original boot1 code at $0800 (block 0)

         mx    %11
         org   $800
         lst   off

*----------------------------

         use   SP.0800.O.E

         use   4/Misc.Macs
         use   4/Util.Macs

*----------------------------

         HEX   01
         TXA              ; slot*16
         AND   #$70
         LSR
         LSR
         LSR
         LSR
         ORA   #$C0
         STA   L095D+2
         STA   $49
         LDY   #$FF
         STY   $48
         INY
         LDA   ($48),Y    ; get $CxFF
         CLC
         ADC   #$03       ; add 3
         STA   L095D+1    ; save smartport entry point
         CLC
         XCE

* Compare BRAM values at $E102D0+$4B

         LDX   #$02
L0820    LDAL  $E1031B,X
         CMP   L082C,X
         BNE   L0894      ; diff, load the demo
         DEX
         BPL   L0820

L082C    LDAL  $E1031E    ; or speedysmith
         BNE   L0896

         JSR   L095D      ; or eject the disk
         DB    $04
         DA    L09B6

         JSR   BELL2      ; and simulate the apple animation
         CLC
         XCE
L083D    REP   #$20
         LDA   #$A0A0
         LDY   #$00
L0844    STA   $0400,Y
         STA   $0500,Y
         STA   $0600,Y
         STA   $0700,Y
         INY
         INY
         BNE   L0844
         SEP   #$30
         LDA   #$03
         STA   CLR80VID
         STA   $3C        ; retry count
L085D    LDA   L0960,Y
         STA   $068A,Y
         INY
         CPY   #$15
         BCC   L085D
         STA   SETALTCHAR
         LDY   #$00
L086D    BEQ   L0874
         LDA   #$DF
         STA   $05A8,Y
L0874    LDA   #$41
         STA   $05A9,Y
         JSR   L0922
         INY
         CPY   #$26
         BCC   L086D
         DEY
L0882    LDA   #$4C
         STA   $05A9,Y
         LDA   #$40
         STA   $05A8,Y
         JSR   L0922
         DEY
         BNE   L0882
         BRA   L086D

* Next code

L0894    LDA   #$00       ; the value that determines
L0896    STA   $00        ; what to load

         SEP   #$20       ; now, check RAM amount
         REP   #$10
         LDY   #$FFFF
         STZ   $06
         STZ   $07
         LDX   #$0002
L08A6    STX   $08
         INX
         TXA
         STA   [$06],Y
         CPX   #$0012
         BCC   L08A6
         LDX   #$0002
L08B4    STX   $08
         INX
         TXA
         CMP   [$06],Y
         BNE   L0909      ; not enough memory
         CPX   #$0012
         BCC   L08B4

* We load boot2

         LDA   #$24       ; at $2400
         STA   L09BF+1
         LDA   #$01       ; block 1
         STA   L09C1
L08CB    JSR   L095D
         DB    $01
         DA    L09BD
         BCS   L0919
         CLC
         XCE
         INC   L09C1
         INC   L09BF+1
         INC   L09BF+1
         LDA   L09C1      ; until block C
         CMP   #$0C
         BCC   L08CB

         LDA   $00        ; never launched
         BEQ   L0901      ; so play the demo

         LDA   #$00       ; set the BRAM check
         XBA
         LDAL  $E1031E
         EOR   #$03
         REP   #$30
         PHA
         PEA   $005E
         _WriteBParam
         SEP   #$30

L0901    REP   #$20       ; launch the boot2
         LDA   L095D+1
         BRL   $2400

*---

L0909    REP   #$20
         LDA   #L098C     ; not enough memory
L090E    STA   L085D+1
         LDX   #$60
         STX   L092C
         BRL   L083D

L0919    CLC
         XCE
         REP   #$20
         LDA   #L09A1     ; boot error
         BRA   L090E
L0922    REP   #$10
         LDX   #$27EC
L0927    DEX
         BNE   L0927
         SEP   #$10
L092C    LDA   KBD
         BMI   L0932
         RTS

         MX    %10
L0932    CMP   #$8D       ; press RETURN
         BNE   L093A
         DEC   $3C        ; retry--
         BEQ   L093E      ; now, we can continue
L093A    STA   KBDSTROBE
         RTS

         MX    %11

L093E    LDX   #$16       ; another message
L0940    LDA   L0975,X
         STA   $0689,X
         DEX
         BPL   L0940
         PHY
         REP   #$30
         PEA   $0001      ; and set BRAM value
         PEA   $005E
         _WriteBParam
         SEP   #$30
         PLY
         RTS
L095D    JMP   $C50D

L0960    ASC   "Check startup device!"
L0975    ASC   "T'as tout faux! Reboot!"
L098C    ASC   "Memoire insuffisante!"
L09A1    ASC   "SPLASH boot error !!!"

L09B6    DB    $03        ; control
         DB    $01        ; for eject
         DA    L09BB
         DB    $04
L09BB    DB    $00
         DB    $00

L09BD    DB    $03        ; readblock
         DB    $01
L09BF    DA    $0000
L09C1    ADR   $000000

* Oh, some source code...

         ASC   "A #$C0"8D
         ASC   " STA SMART+2"8D
         ASC   " STA $49"8D
         ASC   " LDY #$FF"8D
         ASC   " STY $48"8D
         ASC   " INY"8D
         ASC   " LDA ($"
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: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 01 Juil 2018, 18:18    Sujet du message: Répondre en citant

The original boot2 code at $2400. I believe El Mathos (because I see no other person than him to have rewritten the smartport routines) forgot to change the $FF/5600,X (nibble table) before releasing the demo.

Code:

*
* Splash
* (c) 1987, Sergent Claude
* (k) 2018, LoGo
*
* Original boot2 code at $2400 (block 1..)

         mx    %00
         org   $2400
         lst   off

*----------------------------

         use   SP.2400.O.E

         use   4/Misc.Macs
         use   4/Util.Macs

*----------------------------

L2400    STA   L25C0+1
         BRL   L25CB

         DB    $00
L2407    DB    $00        ; checksum
         DB    $00        ; sector
         DB    $00        ; track
L240A    DB    $00        ; side
         DB    $00        ;

* Markers

L240C    DB    $FF
         DB    $AA
         DB    $DE
L240F    DB    $AD
         DB    $AA
         DB    $D5
         DB    $FF
L2413    DB    $AA
L2414    DB    $DE
L2415    DB    $96
         DB    $AA
         DB    $D5

L2418    HEX   00000000000000000000000000000000
         HEX   40404040404040404040404040404040
         HEX   80808080808080808080808080808080
         HEX   C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0

L2458    HEX   000000004040404080808080C0C0C0C0
         HEX   000000004040404080808080C0C0C0C0
         HEX   000000004040404080808080C0C0C0C0
         HEX   000000004040404080808080C0C0C0C0

* Denibblize table

L2498    HEX   3F3E00003D3C003B3A39000000000000
         HEX   38370000003635343332000031301011
         HEX   1213B81415161718191AC0C1C2C3C4C5
         HEX   C6C7C8C9CA1BCC1C1D1ED0D1D21FD4D5
         HEX   2021D822232425262728E0E1E2E3E429
         HEX   2A2BE82C2D2E2F0F0E0D00000C0B0A09
         HEX   0807F806050403020100

L2502    HEX   004080C0004080C0004080C0004080C0
         HEX   004080C0004080C0004080C0004080C0
         HEX   004080C0004080C0004080C0004080C0
         HEX   004080C0004080C0004080C0004080C0

L2542    DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00
         DB    $00

L255A    DW    $0000      ; 0
         DW    $0180      ; 384
         DW    $02E0      ; 736
         DW    $0420      ; 1056
         DW    $0540      ; 1344

L2564    DW    $E120      ; Speedysmith load table
         DW    $0040
         DW    $0008
         DW    $000E
         DW    $0000

L256E    DW    $E120      ; Splash demo load table
         DW    $0040
         DW    $0900
         DW    $0339
         DW    $002A
         DW    $0004
         DW    $0820
         DW    $0040
         DW    $00B8
         DW    $0004
         DW    $0500
         DW    $0080
         DW    $0300
         DW    $0025
         DW    $0400
         DW    $0025
         DW    $0016
         DW    $0001
         DW    $0600
         DW    $0013
         DW    $003A
         DW    $0002
         DW    $0008
         DW    $0004
         DW    $0018
         DW    $0006
         DW    $0720
         DW    $0040
         DW    $034A
         DW    $0031
         DW    $044A
         DW    $0031
         DW    $04B0
         DW    $0006
         DW    $0000

L25B4    CLC
         RTL
         BRK   $00

L25B8    JMPL  $11FE00
L25BC    JMPL  L296D
L25C0    JMP   $C50D
L25C3    JMPL  $FE00AF
L25C7    JMPL  $FF0000

*--- Entry point

L25CB    SEP   #$30       ; set new values
         LDA   #$E1       ; in the IIgs $E1 space
         STA   $99
         LDA   #$00
         STA   $06
L25D5    LDY   $06
         LDA   L271B,Y
         STA   $97
         LDA   #$00
         STA   $98
         JSR   L2702
         INC   $06
         LDA   $06
         CMP   #$07
         BCC   L25D5
         SEP   #$30
         LDX   #$00
L25EF    LDAL  L25C3,X
         STAL  $E10000,X

         LDA   L25BC,X    ; also set values
         STAL  $E10F6F,X  ; of the 3.5" hook routines
         LDAL  $E10F7B,X
         STAL  $E10F77,X
         LDAL  $E10F83,X
         STAL  $E10F7F,X
         LDAL  $E10F8B,X
         STAL  $E10F87,X
         LDAL  $E10F93,X
         STAL  $E10F8F,X
         LDAL  $E10F9B,X
         STAL  $E10F97,X
         LDAL  $E10FA3,X
         STAL  $E10F9F,X
         LDAL  $E10FAB,X
         STAL  $E10FA7,X
         INX
         CPX   #$04
         BCC   L25EF

* The weirdiness

         REP   #$10
         LDX   #$0687     ; 25B8
L2640    LDAL  $001F31,X
         STAL  $E11001,X  ; save at $E1/1688
         INX              ; the Memory Manager Link vector
         CPX   #$068B
         BCC   L2640

         LDX   #$0000     ; put our reset routine
L2651    LDA   L26C2,X
         STAL  $11FE00,X
         INX
         CPX   #$0100
         BCC   L2651
         LDX   #$0000     ; search for a RTS in bank $FF
         LDA   #$60
L2663    CMPL  $FF0000,X  ; pfew
         BEQ   L266C
         INX
         BNE   L2663
L266C    STX   L25C7+1    ; save its index

         REP   #$30       ; set video values
         PEA   $0000
         PEA   $0019
         _WriteBParam
         SEP   #$30
         LDA   #$F5
         STA   TBCOLOR
         LDA   CLOCKCTL
         AND   #$F0

         LDY   $00        ; if Splash demo, skip
         BEQ   L2690
         ORA   #$05
L2690    STA   CLOCKCTL
         STA   SETALTCHAR
         LDA   #$58
         STA   LANGSEL
         LDA   #$41
         STA   NEWVIDEO
         STA   CLR80VID

         REP   #$20       ; erase SCB/PAL
         LDA   #$0000
         TAX
L26A9    STAL  $E19D00,X
         STAL  $E19E00,X
         STAL  $E19F00,X
         INX
         INX
         BNE   L26A9
         SEP   #$30
         LDA   #$C1
         STA   NEWVIDEO
         BRA   L2722

* A great erase mem routine

L26C2    PHP
         PHY
         PHX
         PHA
         PHP
         REP   #$30
         LDA   #$0000
         TAX
L26CD    STAL  $E12000,X
         INX
         INX
         CPX   #$8000
         BCC   L26CD
         LDX   #$0000
L26DB    STAL  $000800,X
         INX
         INX
         CPX   #$B800
         BCC   L26DB
         LDX   #$0687
         SEP   #$20
L26EB    LDAL  $11F7B5,X
         STAL  $E11001,X
         INX
         CPX   #$068B
         BCC   L26EB
         PLP
         PLA
         PLX
         PLY
         PLP
         JMPL  $FF0199

         MX    %11
L2702    LDY   #$00
L2704    LDA   L25B4,Y
         STA   [$97],Y
         INY
         CPY   #$04
         BCC   L2704
         REP   #$20
         LDA   $97
         CLC
         ADC   #$0004
         STA   $97
         SEP   #$20
         RTS

L271B    HEX   28303438545C48

* Next code

L2722    SEP   #$30
         REP   #$10
         LDY   #L2564     ; speedysmith 1
         LDX   #$0001
         LDA   $00
         CMP   #$01
         BCC   L2739
         BEQ   L273F
         LDX   #$0008     ; speedysmith 2
         BRA   L273F
L2739    LDY   #L256E     ; splash demo
         LDX   #$000F
L273F    STY   $93
         TXA
         STA   $8C
         SEP   #$30
         STZ   $91
         STZ   $92
L274A    JSR   L28F2
         STZ   $95
L274F    JSR   L2922
         SEP   #$10
         LDX   $95
         STA   L2542,X
         SEP   #$30
         INC   $95
         INC   $95
         LDA   $95
         LSR
         CMP   $8D
         BCC   L274F
         JSR   L2956      ; read a block
         CLC
         XCE
         SEP   #$30
         INC   $8C
         LDA   $8D
         ASL
         TAY
         LDA   L2542-1,Y
         CMP   #$FF
         BCC   L274A
         BRL   $0800

L277D    LDY   #$19
L277F    LDX   #$02
L2781    DEY
         BEQ   L279F
L2784    LDA   $C0EC      ; read prolog data field
         BPL   L2784
         CMP   L240F,X
         BNE   L277F
         DEX
         BPL   L2781
L2791    LDX   $C0EC      ; read a nibble (bouh ROM 01 only)
         BPL   L2791
         LDAL  $FF5600,X
         CMP   L240A
         BEQ   L27A1
L279F    SEC
         RTS

L27A1    LDA   $8B
         STA   $82
L27A5    LDX   $C0EC
         BPL   L27A5
         STA   $85
         STA   $88
         REP   #$20
         LDA   $89
         BNE   L27B6
         DEC   $82
L27B6    DEC
L27B7    LDX   $C0EC
         BPL   L27B7
         STA   $80
         CLC
         ADC   #$00AB
         STA   $83
         CLC
         ADC   #$00AB
L27C8    LDX   $C0EC
         BPL   L27C8
         STA   $86
         SEP   #$20
         LDY   #$0D
L27D3    LDX   #$02
L27D5    DEX
         BNE   L27D5
L27D8    LDX   $C0EC
         BPL   L27D8
         DEY
         BNE   L27D3
         LDY   #$AB
         BRA   L27F4
L27E4    LDX   $C0EC
         BPL   L27E4
         LDA   L2498-$96,X
         LDX   $66
         ORA   L2502,X
         STA   [$86],Y
         NOP
L27F4    LDX   $C0EC
         BPL   L27F4
         LDA   L2498-$96,X
         STA   $66
         NOP
         NOP
         NOP
L2801    LDX   $C0EC
         BPL   L2801
         LDA   L2498-$96,X
         LDX   $66
         ORA   L2418,X
         STA   [$80],Y
         NOP
L2811    LDX   $C0EC
         BPL   L2811
         LDA   L2498-$96,X
         LDX   $66
         ORA   L2458,X
         STA   [$83],Y
         DEY
         BNE   L27E4
         LDY   #$03
L2825    LDX   $C0EC
         BPL   L2825
         LDX   #$02
L282C    DEX
         BNE   L282C
         DEY
         BPL   L2825

         LDY   #$02
L2834    LDA   $C0EC
         BPL   L2834
         CMP   L240C,Y
         BNE   L2843
         DEY
         BNE   L2834
         CLC
         RTS
L2843    SEC
         RTS

L2845    JSR   L284F
         BIT   $C0ED
         LDA   $C0EE
         RTS

L284F    BIT   $C0E0
         BIT   $C0E3
         BIT   $C0E6
         BIT   $C0E4
         LSR
         BCC   L2861
         BIT   $C0E5
L2861    LSR
         PHA
         LDA   DISKREG
         AND   #$7F
         BCC   L286C
         ORA   #$80
L286C    STA   DISKREG
         PLA
         LSR
         BCC   L2876
         BIT   $C0E1
L2876    LSR
         BCS   L287C
         BIT   $C0E2
L287C    RTS

L287D    LDA   #$0B
         JSR   L2845
L2882    BIT   $C0EE
         BMI   L2882
         RTS

L2888    LDAL  $E10F2B
         BPL   L2892
         LDA   #$03
         BRA   L2894
L2892    LDA   #$01
L2894    JSR   L2845
         LDA   $C0EC
         LDA   $C0EC
         RTS

L289E    JSR   L287D
         JSR   L2888
         LDA   #$07
         STA   $68
         LDY   #$9E
L28AA    LDX   #$02
L28AC    DEY
         BNE   L28B3
         DEC   $68        ; retry--
         BMI   L28F0
L28B3    LDA   $C0EC      ; read prolog address field
         BPL   L28B3
         CMP   L2415,X
         BNE   L28AA
         DEX
         BPL   L28AC
         LDY   #$04
         STZ   $5B
L28C4    LDX   $C0EC      ; read the Side Track Sector Checksum info
         BPL   L28C4
         LDAL  $FF5600,X
         STA   L2407,Y
         EOR   $5B
         STA   $5B
         DEY
         BPL   L28C4
         TAY
         BNE   L28F0
L28DA    LDA   $C0EC      ; the epilog markers
         BPL   L28DA
         CMP   L2414
         BNE   L28F0
L28E4    LDA   $C0EC
         BPL   L28E4
         CMP   L2413
         BNE   L28F0
         CLC
         RTS

L28F0    SEC
         RTS

L28F2    LDA   $8C
         LSR
         LSR
         LSR
         LSR
         AND   #$FE
         TAX
         LSR
         EOR   #$0F
         SEC
         SBC   #$03
         STA   $8D
         REP   #$20
         LDA   L255A,X
         STA   $9A
         LDA   $8C
         AND   #$001F
         TAX
         BEQ   L291F
L2912    LDA   $8D
         AND   #$00FF
         CLC
         ADC   $9A
         STA   $9A
         DEX
         BNE   L2912
L291F    SEP   #$30
         RTS

L2922    REP   #$30
         LDA   $91
         BEQ   L2938
L2928    LDA   $8F
         PHA
         CLC
         ADC   #$0002
         STA   $8F
         LDA   $91
         DEC
         STA   $91
         PLA
         RTS

L2938    LDY   #$0000
         LDA   ($93),Y
         BEQ   L2952
         STA   $8F
         LDY   #$0002
         LDA   ($93),Y
         STA   $91
         LDA   $93
         CLC
         ADC   #$0004
         STA   $93
         BRA   L2928
L2952    LDA   #$FFFF
         RTS

L2956    REP   #$30
         LDA   $9A
         STA   L296A
         SEP   #$30
         JSR   L25C0
         DB    $01
         DA    L2966
         RTS

L2966    DB    $03
         DB    $01
         DA    $BE00
L296A    ADR   $000000

L296D    STZ   $96
         SEP   #$30
         PHB
         LDA   #$00
         PHA
         PLB
L2976    JSR   L289E
         BCS   L29A2
         LDA   L240A
         ASL
         TAX
         REP   #$20
         LDA   L2542,X
         STA   $8A
         SEP   #$20
         STZ   $89
         JSR   L277D
         BCS   L29A2
         INC   $96
         LDA   $96
         CMP   $8D
         BCC   L2976
         PLB
         LDA   #$01
         STA   $0F37
         SEC
         BRL   L25C7
L29A2    REP   #$20
         SEP   #$10
         LDA   #$A0A0
         LDY   #$00
L29AB    STA   $0400,Y
         STA   $0500,Y
         STA   $0600,Y
         STA   $0700,Y
         INY
         INY
         BNE   L29AB
         SEP   #$30
         LDA   #$41
         STA   NEWVIDEO
L29C2    LDA   $2A04,Y
         STA   $068A,Y
         INY
         CPY   #$15
         BCC   L29C2
         STA   SETALTCHAR
         LDY   #$00
L29D2    BEQ   L29D9
         LDA   #$DF
         STA   $05A8,Y
L29D9    LDA   #$41
         STA   $05A9,Y
         JSR   L29F9
         INY
         CPY   #$26
         BCC   L29D2
         DEY
L29E7    LDA   #$4C
         STA   $05A9,Y
         LDA   #$40
         STA   $05A8,Y
         JSR   L29F9
         DEY
         BNE   L29E7
         BRA   L29D2
L29F9    REP   #$10
         LDX   #$27EE
         DEX
L29FF    BNE   $2A01

Oops, some code is missing but it is not useful, it runs the boucing apples on error.
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: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 01 Juil 2018, 18:21    Sujet du message: Répondre en citant

My modified boot1 and boot2 code. All on block 0. The original routines are on blocks 8 to B.

I should have said that Speedysmith is at block $C and above. Speedysmith 2 at block $60 and above. Splash at block $B4 and above.

Code:

*
* Splash
* (c) 1987, Sergent Claude
* (k) 2018, LoGo
*
* Modified boot1 code at $0800 (block 0)

         mx    %11
         org   $800
         lst   off

*----------------------------

         use   SP.0800.M.E

         use   4/Misc.Macs
         use   4/Util.Macs

*----------------------------

L0800    HEX   01
         TXA              ; slot*16
         AND   #$70
         LSR
         LSR
         LSR
         LSR
         ORA   #$C0
         STA   $49
         LDY   #$FF
         STY   $48
         INY
         LDA   ($48),Y    ; get value at $CxFF
         CLC
         ADC   #$03       ; add 3
         STA   $48        ; we have smartport entry point
         SEC
         JSR   IDROUTINE  ; are we on a IIgs?
         BCC   L0821      ; yes
         JMP   $E000      ; no, go to BASIC

L0821    CLC
         XCE
         REP   #$30
         LDAL  TotalMem+2 ; do we have 1.2MB?
         CMP   #$0012
         BCS   L0854

         PEA   $0201      ; memory error
         PushLong #L083E
         _SysFailMgr
L083E    STR   "Memoire insuffisante!"

* Go on...

L0854    LDX   #$01FE     ; relocate our new boot2 code
L0857    LDA   L0866,X
         STA   L2400,X
         DEX
         DEX
         BPL   L0857
         LDA   $48        ; get smartpoint entry point
         JMP   L2400      ; jump

L0866    =     *

*----------------------------
* Boot2 code
*----------------------------

         ORG   $002400

L2400    STA   L24C4+1    ; smartpoint entry point
         STZ   L24EA

         SEP   #$20       ; set video values
         LDA   #$F5
         STA   TBCOLOR
         LDA   CLOCKCTL
         AND   #$F0
         STA   CLOCKCTL
         STA   SETALTCHAR
         LDA   #$58
         STA   LANGSEL
         LDA   #$41
         STA   NEWVIDEO
         STA   CLR80VID

         REP   #$20       ; clear SHR
         LDA   #$0000
         TAX
L242B    STAL  $E12000,X
         INX
         INX
         BPL   L242B

         SEP   #$20
         LDA   #$C1
         STA   NEWVIDEO
         REP   #$20
         STA   KBDSTROBE-1

L243F    LDY   #$0020     ; loop
L2442    LDX   #$0020     ; wait for a key
L2445    LDA   KBD-1
         BMI   L2458
         DEX
         BPL   L2445
         DEY
         BPL   L2442      ; none, we load the demo
         LDX   #$00B4     ; block B4
         LDY   #L24F8     ; load table
         BRA   L2472

* Do we have to load Speedysmith?

L2458    STA   KBDSTROBE-1
         XBA
         AND   #$00FF
         LDY   #L24EE
         LDX   #$000C     ; block C
         CMP   #$00B1     ; key is 1
         BEQ   L2472
         CMP   #$00B2     ; key is 2
         BNE   L243F
         LDX   #$0060     ; block 60

L2472    STX   L24EA      ; block number
         STY   $98        ; load table
L2477    LDY   #$0000
         LDA   ($98),Y
         BEQ   L2495      ; 0000 means end of table
         STA   L24E6+1    ; or load address
         LDY   #$0002
         LDA   ($98),Y    ; nb of blocks
         STA   $96
         JSR   L24C0      ; read chunk
         LDA   $98        ; next table entry
         CLC
         ADC   #$0004
         STA   $98
         BRA   L2477
L2495    JMP   L0800      ; we jump

L2498    CLC              ; error, we quit
         XCE
         REP   #$30
         PHA
         PushLong #L24AA
         _SysFailMgr
L24AA    STR   "SPLASH boot error !!!"

L24C0    SEC
         XCE
         SEP   #$30
L24C4    JSR   $C50D      ; readblock extended
         DB    $41
         ADRL  L24E4
         BCS   L2498

         CLC              ; RAM += $200
         XCE
         REP   #$30
         LDA   L24E6+1
         CLC
         ADC   #$0002
         STA   L24E6+1
         INC   L24EA      ; next block
         DEC   $96        ; blocknb--
         BNE   L24C0
         RTS

L24E4    DB    $03
         DB    $01
L24E6    ADRL  $00000000
L24EA    ADRL  $00000000

L24EE    DW    $E120      ; load address
         DW    $0040      ; number of blocks
         DW    $0008
         DW    $000E
         DW    $0000

L24F8    DW    $E120
         DW    $0040
         DW    $0900
         DW    $0339
         DW    $002A
         DW    $0004
         DW    $0820
         DW    $0040
         DW    $00B8
         DW    $0004
         DW    $0500
         DW    $0080
         DW    $0300
         DW    $0025
         DW    $0400
         DW    $0025
         DW    $0016
         DW    $0001
         DW    $0600
         DW    $0013
         DW    $003A
         DW    $0002
         DW    $0008
         DW    $0004
         DW    $0018
         DW    $0006
         DW    $0720
         DW    $0040
         DW    $034A
         DW    $0031
         DW    $044A
         DW    $0031
         DW    $04B0
         DW    $0006
         DW    $0000
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