Autore Topic: Visualizzare immagine durante il caricamento  (Letto 12685 volte)

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #15 il: 19 Ottobre 2016, 15:34:29 »
Piccolo aggiornamento:
Dopo una serie di test sono sicuro al 99% che il freesaver +prg non riesce a caricare prg che vanno sulla memoria IO e Kernel (dopo la fase di decrunching ovviamente).
Ho compilato diversi prg e, se provo a mettere qualsiasi cosa in quello spazio di ram, non funziona più nulla...
Voglio sicuramente approfondire il metodo freesaver + freeloader +prg che probabilmente non soffrirà di tale limitazione!

Nel mentre ho provato questo fantastico script in pyton: http://csdb.dk/release/?id=108580 che funziona senza alcun problema!


Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Q
« Risposta #16 il: 19 Ottobre 2016, 17:51:31 »
Innanzi tutto, l'immagine CRT della AR6 la puoi scaricare da qui.
Poi ti confermo tutti i miei sospetti: il codice DASM originale del loader contenente le subroutine per la gestione dello scrolltext, grafica e musica, contiene una MONTAGNA DI FUFFA.
Sono partito dal mio "multiloader" e ho ricostruito un loader concettualmente identico, ma con codice nuovo.
Ne trovi un esempio con musica e scrolltext scaricabile da qui.
Da notare che il mio codice non compie nessuna "raffinatezza" nel codice d'uscita: setta $01, "spegne" il SID e salta brutalmente all'indirizzo di partenza del programma linkato.
Ho semplificato molto le cose: un trigger per ogni file che viene attivato DOPO il load del file stesso (eh...si... prima si carica la musica e poi la si esegue... oppure prima si carica un file e poi si fa partire lo scrolltext...).

Non riesco a capire perchè l'autore originario l'abbia pensata diversamente, ma io mi limito a lanciare l'esecuzione dopo il caricamento delll'ultimo file.
A quel punto si presuppone che tutto sia in memoria e che si possa andar tranquilli...

Cose da sistemare: resettare ai valori di default i registri CIA e Vettori IRQ prima di lanciare il programma caricato. Il codice originale DASM, fra i vari macelli che fa, non si preoccupa minimamente di ripristinare le cose e, molto probabilmente, i problemi che hai "post loading" sono dati dai vettori IRQ che puntano lanciati verso il nulla cosmico.

(Quando sarò soddisftatto di come funziona posto anche una versione completa... ma per ora:)
-Nucleo principale del mio loader-
Codice: [Seleziona]
;-------------------
    JSR INIT_TURBO
    LDY #FILES_TO_LOAD
    STY FILE_N_BUFFER
    JSR TURBO_LOAD
;-------------------
    LDA #PROGRAM_01
    STA $01
    JSR $E544
    JMP PROGRAM_START
Cioè: "quanti files devo caricare?",  "Ok, li carico", "...bene... ho finito di caricare, setto $01 e lancio il programma".

"Main" part che gestisce il caricamento dei files, -interfacciandosi- col codice che gira in IRQ:
Codice: [Seleziona]
;---------------------------------------
; TURBO_LOAD
; Entered with "Y" equals number of files
; to load
;-------------------
TURBO_LOAD
    BIT $D011
    BPL TURBO_LOAD
TURBO_WAIT
    BIT $D011
    BMI TURBO_WAIT
;-------------------
MUSIC_FLAG = *+$0001
    LDA #$00
    BEQ MUSIC_DISABLED
    JSR MUSIC_PLAY
MUSIC_DISABLED
;-------------------
SCROLL_FLAG = *+$0001
    LDA #$00
    BEQ SCROLL_DISABLED
    JSR SMOOTH_SCROLL
    LDA $D016                            ; do the hardware x scroll
    AND #%11111000
SMOOTH_X = *+$0001
    ORA #$00
    STA $D016
;-------------------
SCROLL_DISABLED
    LDX LOAD_FLAG                       ; wait for nonzero ($FF) loadflag value
    BEQ TURBO_LOAD
    INX                                 ; reset loadflag
    STX LOAD_FLAG
;-------------------
ACTUAL_FILE = *+$0001
    LDX #$00
    LDA FILE_TRIGGERS,X                 ; see if anything is required to happen
    BEQ NO_TRIGGER
    ASL
    TAX
    LDA ROUT_LOOKUP,X                   ; do any routines required
    STA JUMPVEC_1+$0001
    LDA ROUT_LOOKUP+$0001,X
    STA JUMPVEC_1+$0002
JUMPVEC_1
    JSR $DEAD                           ; self modified
;-------------------
NO_TRIGGER
    INC ACTUAL_FILE
FILE_N_BUFFER = *+$0001
    LDY #$00
    DEY
    STY FILE_N_BUFFER
    BNE TURBO_LOAD
Come vedi, niente di trascendentale:
Soliti BIT $D011 per sincronizzarsi al VB (al posto di quel macello di CMP e OVERLAY che usa l'originale), semplici FLAGS per lanciare musica, scrolltext e quant'altro, e lo stesso codice di TRIGGERING.

Ovviamente oltre a questo, c'è il codice di INIT dell'IRQ e il codice IRQ vero e proprio, che è lo stesso dell'originale.

Quindi il "SAVER" funziona correttamente... i problemi li crea tutti il LOADER.

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #17 il: 19 Ottobre 2016, 21:10:13 »
Ecco qui il loader con il nuovo codice che implementa tutte le subroutine, musica, scrolltext e grafica:
Freeload Test Tape

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #18 il: 20 Ottobre 2016, 10:26:23 »
Che dire... La tua competenza è davvero degna di nota!

Per quanto riguarda l'AR ho provato a caricare un prg ma non vedo sti' benedetti address!
Con il vice:
 - Inserisco la cartuccia
 - F7 per installare fastload
 - LOAD "A",8,1
 - niente indirizzi....(allego foto)

Per il freeload, mentre attendo con pazienza un eventuale rilascio del tuo sorgente modificato, approfitto per chiederti un chiarimento:
Considerando che ho un demo che parte da $0801 ed occupa un bel po di ram, che limitazioni ci sono nella rilocazione del loader? Posso compilarlo anche in un'area che poi verrà sovrascritta dal gioco vero e proprio, oppure devo riservare uno spazio "sicuro per il loader"?

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #19 il: 20 Ottobre 2016, 13:20:31 »
Per l'action replay devi abilitare la True Drive Emulation (emulazione hardware dei drives), poi vedrai che ti funziona.
Per la seconda domanda: niente deve sovrascrivere il loader che, comunque, carica anche sotto le rom e forse anche a $Dxxx... ma di questo non sono sicuro al 100% perchè ricordo che il codice modifica $01 durante il load, ma non ho presente bene per cosa al momento...

Il mio codice lo rilascio appena ho finito di controllare una cosa: nonostante io resetti tutto quello che riguarda gli irq, succede di ritrovarsi in esecuzione del codice nello stack... ma non ho capito bene ancora da cosa dipende... se è dovuto proprio alla gestione degli indirizzi nello stack stesso oppure se resta qualche irq/nmi spurio che sopravvive anche dopo l'uscita dal loader...

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #20 il: 20 Ottobre 2016, 16:51:55 »
Ok! intanto grazie ancora per i numerosi spunti!

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #21 il: 20 Ottobre 2016, 17:51:49 »
Eccolo qua.
Versione 64Tass...
Probabilmente migliorabile ma... almeno funziona come dovrebbe.
Nel caso ci siano errori od omissioni... mi corriggerete.
 :)
Codice: [Seleziona]
;-------------------------------------------------------------------------------
; FREELOAD FlavioWeb custom version 1.0
;-------------------------------------------------------------------------------
; Based ond Freeload Version 5.0
; (c) Paul Hughes 01.01.1989
; Custom version by Flavioweb 2016
;-------------------------------------------------------------------------------
; To use
;
; Set contants:
; PROGRAM_START = Start address of loaded program
; MUSIC_INIT = Sid tune initialization address (if used)
; MUSIC_PLAY = Sid tune play address (if used)
; ------------------
; Set FILE_TRIGGERS with one trigger per file to load.
; If a file don't need a trigger, leave it at $00.
; Edit your scrolltext ad well...
;
; Picture details:
; Color RAM data: $C400
; Screen RAM data: $C800
; Bitmap data: $E000
;---------------------------------------
; Constants
;-------------------
HEADER_BYTE = $40                       ; Header byte value
HEADER_END = $5A                        ; Header end byte value
LOADER_START = $C000                    ; This loader start address
PROGRAM_START = $080D                   ; Loaded program start address
MUSIC_INIT = $A600                      ; Sid tune Init address
MUSIC_PLAY = $A603                      ; Sid tune Play address
CLEAR_BITMAP_FLAG = $01                 ; Clear Bitmap area $E000-$FF40 at start.
BITMAP_ADDRESS = $E000                  ; Picture Bitmap data address
COLOR_ADDRESS = $C400                   ; Picture Color RAM data address
SCREEN_ADDRESS = $C800                  ; Picture Screen RAM data address
;---------------------------------------
; VARIABLES
; Variables used by cassette loader,
; MUST follow contiguously
;-------------------
ZP = $10
LOAD_ADDR = ZP                          ; loader data start
LOAD_END = ZP+$02                       ; loader data end
VERIFY = ZP+$03                         ; saved checksum
CHECKSUM = ZP+$04                       ; checksum value
BIT_COUNT = ZP+$05                      ; bit store
LOAD_FLAG = ZP+$06                      ; loader monitor flag
;---------------------------------------
; Loader starts here...
;-------------------
    *= LOADER_START
START
    LDX #$37
    STX $01
    JSR $E544
    LDX #$FF                            ; reset the stack
    TXS
    INX
    STX $D020                           ; screen & borders black
    STX $D021
    TXA
BLANK_ATTR
    STA $D800,X                         ; blank the attributes
    STA $D900,X
    STA $DA00,X
    STA $DB00,X
    INX
    BNE BLANK_ATTR
    LDX #$27
SET_LINES
    LDA #$01
    STA $D800+$17*$28,X                 ; set attributes for scrolling
    LDA #$07
    STA $D800+$16*$28,X                 ; set attributes for dividers
    STA $D800+$18*$28,X
    LDA #$40                            ; print dividers
    STA $0400+$16*$28,X
    STA $0400+$18*$28,X
    LDA #$20
    STA $0400+$17*$28,X
    DEX
    BPL SET_LINES
;-------------------
    LDA CLEAR_BITMAP_FLAG               ; If this flag is selected, then before
    BEQ DO_NOT_CLEAR                    ; loader starts, ram between $E000 and $FF40 is
    JSR CLEAR_BITMAP                    ; cleared to avoid loader -slow down-
DO_NOT_CLEAR
;-------------------
    JSR INIT_TURBO
    LDY #FILES_TO_LOAD
    STY FILE_N_BUFFER
    JSR TURBO_LOAD
;-------------------
    SEI
    LDX #$FF
    TXS
    LDA #$37
    STA $01
;-------------------
    JSR TUNE_OFF
    LDA #$00
    STA $0286
    STA $D020
    STA $D021
    JSR $E544
    LDX #$1F
    JSR $E5AA
    LDX #$05
IRQ_VEC_LOOP
    LDA $FD30,X
    STA $0314,X
    DEX
    BPL IRQ_VEC_LOOP
;-------------------
    LDA #$81
    STA $DC0D                           ; Re-enable IRQs
    LDA $DD0D                           ; Re-enable NMIs
    LDA #$11
    STA $DC0E                           ; Setup IRQ
    LDA #$97
    STA $DD00                           ; Default VICII-Bank
    LDX #$1B
    STX $D011
;-------------------
    CLI
    JMP PROGRAM_START
;---------------------------------------
; INIT_TURBO - Initialises Freeload
;-------------------
INIT_TURBO
    SEI
    LDA #$00
    STA LOAD_FLAG                       ; Reset load flag
    STA BIT_COUNT                       ; Reset bit count
    STA $D01A                           ; Halt rasters
    LDA #$7F                            ; Latch interrupts
    STA $DC0D
    STA $DD0D
    LDA $DC0D                           ; Unlatch interrupts
    LDA $DD0D
    ASL $D019
    LDA #$05                            ; ROMS's out cassette motor on
    STA $01
    LDA #$68
    STA $DC04                           ; Set CIA #$01 Timer A countdown time
    LDA #$03
    STA $DC05
    LDA #$90
    STA $DC0D
    LDA #<LOADER_IRQ
    STA $FFFE                           ; Point the interrupt vector to loader
    LDA #>LOADER_IRQ
    STA $FFFF
    CLI
    RTS
;---------------------------------------
; TURBO_LOAD
; Entered with "Y" equals number of files
; to load
;-------------------
TURBO_LOAD
    BIT $D011                           ; Vertical Blank Sync
    BPL TURBO_LOAD
TURBO_WAIT
    BIT $D011
    BMI TURBO_WAIT
;-------------------
MUSIC_FLAG = *+$0001
    LDA #$00                            ; Should i play some noise?
    BEQ MUSIC_DISABLED
    JSR MUSIC_PLAY
MUSIC_DISABLED
;-------------------
SCROLL_FLAG = *+$0001
    LDA #$00                            ; Should i display some text?
    BEQ SCROLL_DISABLED
    JSR SMOOTH_SCROLL
    LDA $D016                           ; Do the hardware x scroll
    AND #%11111000
SMOOTH_X = *+$0001
    ORA #$00
    STA $D016
;-------------------
SCROLL_DISABLED
    LDX LOAD_FLAG                       ; Wait for nonzero ($FF) loadflag value
    BEQ TURBO_LOAD
    INX                                 ; Reset loadflag
    STX LOAD_FLAG
;-------------------
ACTUAL_FILE = *+$0001
    LDX #$00
    LDA FILE_TRIGGERS,X                 ; See if anything is required to happen
    BEQ NO_TRIGGER
    ASL
    TAX
    LDA ROUT_LOOKUP,X                   ; Do any routines required
    STA JUMPVEC_1+$0001
    LDA ROUT_LOOKUP+$0001,X
    STA JUMPVEC_1+$0002
JUMPVEC_1
    JSR $DEAD                           ; Self modified
;-------------------
NO_TRIGGER
    INC ACTUAL_FILE
FILE_N_BUFFER = *+$0001
    LDY #$00
    DEY
    STY FILE_N_BUFFER
    BNE TURBO_LOAD
;-------------------
    SEI
    JSR TUNE_OFF                        ; Silence, please.
    LDA #$35                            ; Motor off, ROMS out
    STA $01
    LDA #$7F                            ; Unlatch interrupts
    STA $DC0D
    STA $DD0D
    LDA $DC0D
    LDA $DD0D
    LDA #$00                            ; Reset border colour
    STA $D020
    LDA #$1B
    STA $D011                           ; Screen on
    RTS
;---------------------------------------
; LOADER_IRQ
; All data is recieved through here
;-------------------
LOADER_IRQ
    PHA
    TYA
    PHA
    LDA $D020                           ; Flash the border
    EOR #$05
    STA $D020
    LDA $DC05
    LDY #$19                            ; Trigger the counters
    STY $DC0E
    EOR #$02
    LSR
    LSR                                 ; Shift in a BIT
    ROL BIT_COUNT                       ; Until dummy bit 7 gets shifted out
    LDA BIT_COUNT
BRANCH_MOD_1
    BCC WAIT_HEADER                     ; Self modified branch
REFERENCE
    BCS EXIT
WAIT_HEADER
    CMP #HEADER_BYTE                    ; Is it a Header ?
    BNE EXIT
    LDA #HEADER_CHECK-REFERENCE
    STA BRANCH_MOD_1+$0001
SET_AND_EXIT
    LDA #%11111110                      ; Init bit counter for the next 8
    STA BIT_COUNT
EXIT
    LDA $DC0D                           ; Acknowledge NMI
    PLA
    TAY
    PLA
    RTI                                 ; Return
;-------------------
HEADER_CHECK
    CMP #HEADER_BYTE
    BEQ SET_AND_EXIT                    ; Confirmed Header Byte
    CMP #HEADER_END                     ; Is it a Header END marker ?
    BEQ CLEAR_CHECKSUM                  ; Yes it is
    BNE SET_HEADER
; -------------------
CLEAR_CHECKSUM
    LDA #SET_LOAD_ADDR-REFERENCE
    STA BRANCH_MOD_1+$0001
    LDA #$00                            ; Clear the checksum
    STA CHECKSUM
    BEQ SET_AND_EXIT                    ; Branch always !
;-------------------
SET_LOAD_ADDR
    STA LOAD_ADDR                       ; Store start Address
    INC SET_LOAD_ADDR+$0001             ; And end address
    LDA SET_LOAD_ADDR+$0001
    CMP #LOAD_ADDR+$0004
    BNE SET_AND_EXIT
    LDA #STORE_BYTE-REFERENCE
    STA BRANCH_MOD_1+$0001
    BNE SET_AND_EXIT                    ; Branch always !
;-------------------
STORE_BYTE
    LDY #$00
    DEC $01                             ; Page $D0 enabled
    STA (LOAD_ADDR),Y                   ; Store recieved BYTE
    INC $01                             ; Page $D0 disabled
    EOR CHECKSUM
    STA CHECKSUM                        ; Store Checksum
    INC LOAD_ADDR                       ; Bump the LOAD ADDRESS COUNTER
    BNE NO_CARRY
    INC LOAD_ADDR+$0001
    INC $D020
NO_CARRY
    LDA LOAD_ADDR                       ; Have we finished yet ?
    CMP LOAD_END
    LDA LOAD_ADDR+$0001
    SBC LOAD_END+$0001
    BCC SET_AND_EXIT                    ; No
    LDA #LOAD_COMPLETE-REFERENCE
    STA BRANCH_MOD_1+$0001
    BNE SET_AND_EXIT                    ; Branch always !
;-------------------
LOAD_COMPLETE
    STA VERIFY                          ; Store the verify BYTE
    LDA #$FF                            ; Signal to FREELOAD that a load
    STA LOAD_FLAG                       ; Has completed
    LDA #LOAD_ADDR
    STA SET_LOAD_ADDR+$0001             ; Reset low byte of load address
SET_HEADER
    LDA #WAIT_HEADER-REFERENCE
    STA BRANCH_MOD_1+$0001              ; Reset ready for the next file
    BNE SET_AND_EXIT                    ; Branch always !
;---------------------------------------
; Smooth scroll subroutines
;-------------------
SMOOTH_SCROLL
    LDA SMOOTH_X                        ; Alter the smooth X
    SEC
    SBC #$02
    AND #$07
    STA SMOOTH_X
    BCC DO_BLOCK
    RTS
;-------------------
DO_BLOCK
    LDX #$00                            ; Shunt line 23 across
SHIFT_LINE
    LDA $0401+$17*$28,X
    STA $0400+$17*$28,X
    INX
    CPX #$27
    BNE SHIFT_LINE
PRINT_CHAR
    LDA SCROLL_TEXT                     ; Print the new message byte
    BEQ WRAP_MESS
    AND #$3F
    STA $0427+$17*$28
    INC PRINT_CHAR+$0001
    BNE PRINT_CHAR_01
    INC PRINT_CHAR+$0002
PRINT_CHAR_01
    RTS
;-------------------
WRAP_MESS
    LDA #<SCROLL_TEXT                   ; Reset the message
    STA PRINT_CHAR+$0001
    LDA #>SCROLL_TEXT
    STA PRINT_CHAR+$0002
    JMP PRINT_CHAR
;-------------------
CLEAR_BITMAP
    LDA #$00
CLEAR_ADDR = *+$0001
    STA BITMAP_ADDRESS
    INC CLEAR_ADDR
    BNE NO_CARRY_02
    INC CLEAR_ADDR+$0001
NO_CARRY_02
    LDA CLEAR_ADDR
    CMP #$40
    BNE CLEAR_BITMAP
    LDA CLEAR_ADDR+$0001
    CMP #$FF
    BNE CLEAR_BITMAP
;-------------------
    LDA #$06                            ; Setup the Bitmap colours
    STA $D021
    LDA #$00
    STA $D020
    RTS
;---------------------------------------
; Files triggers Routines
;-------------------
BITMAP_ON
    LDA #$C0                            ; Switch bitmap on
    STA $DD00
    LDA #$3F
    STA $DD02
    LDA #$28                            ; Colour @ $C800, bitmap @ $E000
    STA $D018
    LDA #$3B                            ; Bitmap on
    STA $D011
    LDA #$D8                            ; Multi colour on
    STA $D016
;-------------------
    LDX #$00                            ; Copy up to colour ram
FILL_COL
    LDA COLOR_ADDRESS+$0000,X           ; From COLOR_ADDRESS to $D800
    STA $D800,X
    LDA COLOR_ADDRESS+$0100,X
    STA $D900,X
    LDA COLOR_ADDRESS+$0200,X
    STA $DA00,X
    LDA COLOR_ADDRESS+$0300,X
    STA $DB00,X
    INX
    BNE FILL_COL
    STX SCROLL_FLAG                    ; Switch the scroll off
    RTS
;-------------------
BITMAP_OFF
    LDA #$97                            ; Switch the Bitmap off
    STA $DD00
    LDA #$1B                            ; Bitmap off
    STA $D011
    LDA #$C8                            ; Multi colour off
    STA $D016
    LDA #$D2                            ; Reset char and screen memory
    STA $D018
;-------------------
    LDX #$00
    TXA
BLACK_OUT
    STA $D800,X                         ; Blank the attributes
    STA $D900,X
    STA $DA00,X
    STA $DB00,X
    STA $D021
    INX
    BNE BLACK_OUT
    RTS
;-------------------
TUNE_ON
    LDX #$01
    STX MUSIC_FLAG
    DEX
    TXA
    TAY
    JMP MUSIC_INIT
;-------------------
TUNE_OFF
    LDA #$00
    STA MUSIC_FLAG
    LDX #$18                            ; Clear SID chip
CLR_SID
    STA $D400,X
    DEX
    BPL CLR_SID
    RTS
;-------------------
SCROLL_ON
    LDA $D016
    AND #%11110111
    STA $D016
    INC SCROLL_FLAG
    RTS
;-------------------
SCROLL_OFF
    DEC SCROLL_FLAG
    RTS
;---------------------------------------
; Files triggers table
;-------------------
FILES_TO_LOAD = FILE_TRIGGERS_END-FILE_TRIGGERS
;-------------------
FILE_TRIGGERS
    .BYTE $05                           ; Trigger for file 1 (B) Music
    .BYTE $02                           ; Trigger for file 2 (C) Color
    .BYTE $01                           ; Trigger for file 3 (D) Screen
    .BYTE $00                           ; Trigger for file 4 (E) Bitmap
    .BYTE $00                           ; Trigger for file 2 (F) Intro
FILE_TRIGGERS_END
;---------------------------------------
; Lookup table for files triggers
;-------------------
ROUT_LOOKUP
    .ADDR $0000                         ; Dummy
    .ADDR BITMAP_ON                     ; 01 (this also turns the scroll off)
    .ADDR TUNE_ON                       ; 02
    .ADDR BITMAP_OFF                    ; 03
    .ADDR TUNE_OFF                      ; 04
    .ADDR SCROLL_ON                     ; 05
    .ADDR SCROLL_OFF                    ; 06
;---------------------------------------
; Scroll text
;-------------------
SCROLL_TEXT
    .TEXT "FREELOAD TEST BY FLAVIOWEB 2016 - "
    .TEXT "ANTONIO MAURO - READY 64 !!!      "
    .BYTE $00
;-------------------------------------------------------------------------------

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #22 il: 20 Ottobre 2016, 22:02:00 »
Piccola nota (quasi) a margine:
il SAVER forza il caricamento dei "segmenti" di programma da salvare su nastro, a $1000.
Ovviamente poi cambia lo start address e ricalcola l'indirizzo finale per il salvataggio, ma il fatto che debba avere i files in memoria da $1000, e che di default il SAVER sia compilato a $C000, significa che un file da salvare deve necessariamente stare fra $1000 e $BFFF indipendentemente dal suo indirizzo di caricamento originario...
Spostare il saver a $0801 ci lascia la ram da $1000 a $CFFF facendoci guadagnare 4k per i nostri dati...

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #23 il: 21 Ottobre 2016, 10:38:21 »
Grande! Lo provo subito!!

Ma per rilocare il saver a $0801 mi basta modificare la direttiva "org $C000" oppure bisogna ritoccare qualche altra istruzione/costante?

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #24 il: 21 Ottobre 2016, 12:01:26 »
Basta modificare l'ORG...
Se metti $0801 come infdirizzo di partenza, poi eseguirai il SAVER con  SYS 2049.
Tieni presente che se il tuo programma può essere "diviso" in più file, puoi caricaricarli uno alla volta in memoria, al posto di avere un "bloccone" tutto exomizato.
Certo è che un "blocco" exomizato da $1000 a $CFFF dovrebbe essere più che sufficiente...

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #25 il: 24 Ottobre 2016, 10:07:06 »
Attualmente ho un solo "bloccone" exomizzato sfx, cosa che risulta molto comoda per un demo/gioco single load. Per utilizzare questo metodo dovrò sicuramente riorganizzare il tutto dividendo in più parti rinunciando però alla comodità dell'auto decrunch!....

Per quanto riguarda invece i loader da disco cosa mi consigli?

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #26 il: 25 Ottobre 2016, 15:51:18 »
Quanto "occupa" il bloccone?
Da $0801 a dove?

Per il disco, io ti consiglio il CovertBitOps Loader, discretamente semplice da usare, supporta direttamente i file exomizati (e pucrunch) e li decruncha al volo (level packed).
Oppure il loader di Krill

Per il disco ce ne sono millemila... dipende da cosa devi fare.
Specifico per i demo, potrebbe essere questo:
BitFire o il relativo repo GitHub.

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #27 il: 25 Ottobre 2016, 16:46:42 »
Il bloccone exomizzato attualmente arriva a $3873 ma dovrebbe crescere ancora un bel po'!

Se ho ben capito i loader da disco non hanno un "saver" ma implementano solo il caricamento di dati via IRQ.
Bisogna quindi importare tali funzioni nel proprio codice e creare le logiche di caricamento (immagini, musica, codice,ecc...)
Corretto?

Flavioweb

  • Redazione
  • Utente
  • ****
  • Post: 58
    • http://www.flavioweb.it
  • Gioco Preferito: Maniac Mansion
Re:Visualizzare immagine durante il caricamento
« Risposta #28 il: 25 Ottobre 2016, 21:39:25 »
Si, corretto.
Generalmente i loader disco sono divisibili in 2 parti: init e loader.
Se non serve interagire col disco se non per caricare i files, allora una volta inizializzato il loader, il codice di init può essere cancellato/sovrascritto, mentre la parte del loader vera e propria deve essere residente in memoria.
Di solito i loader disco, oltre ad alcune locazioni in zp, servono aree buffer per allocare i dati durante la lettura ed eventualmente altre aree dati/zp per le routines di decrunch usate durante il loading (se richiesto).
Comunque il freeload non ha particolari problemi a gestire file exomizati auto scompattanti...

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Re:Visualizzare immagine durante il caricamento
« Risposta #29 il: 26 Ottobre 2016, 09:47:26 »
Comincio a fare qualche test con il "CovertBitOps Loader" giusto perchè compilabile in dasm senza modifiche....
Quindi per un uso "tradizionale" tutta la parte che segue a :"INITFASTLOAD" riga 1303 può essere eseguita e poi sovrascritta con altri dati?
Come si può specificare in quale locazione verrano caricati i dati utilizzando le funzioni "loadfile_*"?

Perdona le tante (forse banali)domande!!