Autore Topic: Datasette Che Si Inchioda  (Letto 2999 volte)

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Datasette Che Si Inchioda
« Risposta #15 il: 08 Luglio 2006, 20:32:30 »
 
Citazione da: "fab"
Citazione da: "Massi cadenti"
Citazione
E addirittura mi pareva che, in alcune cassette da edicola, esistesse anche il Connection con le righe colorate.
No, lo escludo. Tutti i caricamenti da edicola con le righe colorate erano varianti del Turbo202 (almeno a livello di frequenze e velocità usate lo erano tutti, compreso l'Easy-Tape ossia quello usato nelle AlGa Soft).
Alcune versioni del Turbo202 facevano comparire la chiocciola quindi se è su quello che ti basi per definire il connection sbagli.
Qui tutto sta a definire che cosa è "Connection" e che cosa è "Turbo 202".
Perfetto, ecco degli esempi.
CONNECTION
TURBO202

Citazione
Un formato di caricamento è definito da come i byte sono codificati sulla cassetta. Ci possono essere diverse varianti di loader, cioè codice scritto diversaamente, che riconoscono lo stesso formato sulla cassetta. Esempi erano il Turbo Tape 64 di Stefan Senz e il caricatore Turbo Tape 64-compatibile di Videobasic (quello di "PREMI LA BARRA SPAZIATRICE"): codice diverso (anche se sicuramente uno originato dall'altro), stesso formato. Perciò si potevano caricare i programmi Videobasic anche col Turbo Tape 64 di Senz.
Stai scherzando, vero?
Forse davvero non te ne sei mai accorto, ma il "PREMI LA BARRA SPAZIATRICE" è scritto tramite un PRINT prima del caricamento in turbo (si vede anche un attimo prima che cominci la parte in turbo) mentre tutto il grosso del caricamento viene effettuato dal solito <-L . Non lo vedi perché è dello stesso colore del fondo, ma c'è.
Del resto basta caricare il loader (la parte all'inizio di ogni programma di videobasic che si carica normalmente con LOAD) *SENZA* lo shift+run/stop, quindi col normale LOAD evitando l'autostart, e dare un LIST per rendersi conto di come funziona il tutto. Nel codice qui riportato ho eliminato le linee REM per motivi di spazio.

Codice: [Seleziona]
1001 POKE53280,6:POKE53281,6:PRINT"{clrhome}{ctrl+7}"
(cutted linee rem)
1022 SYS2150:POKE639,32:POKE640,32
1023 POKE631,95:POKE632,76:POKE633,13:POKE634,32:POKE635,82:POKE636,85:POKE637,78:POKE638,13
1024 POKE198,8 :PRINT"{ctrl+2}PREMI LA BARRA SPAZIATRICE{ctrl+7}.":NEW
La riga 1001 non ha bisogno di commenti.
Nella 1022, la sys richiama e attiva il turbo tape. Dalla 1023 le poke mettono nel buffer di tastiera la sequenza "<-L{invio}{spazio}RUN{invio}" e indicano (POKE198,8) il numero di caratteri in esso, scrivono in alto in bianco "PREMI LA BARRA SPAZIATRICE", ripristinano il colore del fondo e cancellano il programma dalla memoria (o per meglio dire azzerano i puntatori del BASIC e delle variabili), dando così origine al nuovo caricamento (stavolta in turbo).
Le due poke in più in linea 1022 immettono due spazi che però non servono a niente perché non sono "scaricati" dal POKE198,8 in linea 1024 (doveva essere POKE198,10).
Le rem (non copiate qui) servono principalmente per "riempire lo spazio" fino a 2147, chiaro segno che questa routine di turbo tape (non rilocabile) è stata "estrapolata" da qualcos'altro (esatto, proprio il programma originale di Stephen Senz).

Citazione
Forse, ritrovare la rivista specializzata (o quant'altro) in cui appariva la definizione "Connection" può aiutare a dirimere la questione.
Tanto per dirne uno, "UNIVERSAL TAPE" delle edizioni APE (la stessa del sistema "Progredisco" pubblicizzato su C.C.C.). Lì viene definito "Connection 2". O meglio:

Codice: [Seleziona]
 QUESTA UTILITY PERMETTE DI COPIARE DA
NASTRO A DISCO I PROGRAMMI REGISTRATI
CON TRE DIVERSI VELOCIZZATORI:
IL CONNECTION,LA CUI CARATTERISTICA E'
LA COMPARSA,DUE VOLTE,DEL PROMPT 'READY'
AL TERMINE DEL CARICAMENTO.

  IL SECONDO TIPO DI VELOCIZZATORE E'
CARATTERIZZATO DALLA COMPARSA ,SEMPRE
AL TERMINE DEL CARICAMENTO,DAL SIMBOLO '@
SULLO SCHERMO.

  IL TERZO,IL TURBO 202, E' CARATTERIZ-
ZATO DA STRISCE MULTICOLORI SUL VIDEO
DURANTE IL CARICAMENTO.

Nella schermata di selezione vera e propria vengono chiamati:
Codice: [Seleziona]
F1 CONNECTION
F3 CONNECT. 2 (@)
F5 TURBO 202

Citazione
Mi pare che questo dipendesse dalla riga in cui scrivevi LOAD.
No, o almeno non soltanto. Ripeto, dalla mia esperienza la posizione della @ era comunque casuale, anche se "generalmente" compariva sulla destra del quadro (dove di solito c'era più "vuoto", ma magari era solo perché le altre volte non si notava nemmeno in mezzo alle scritte).

Citazione
Se era quella giusta, il rU finale veniva scritto nella stessa riga della @.
Anche questa: negli anni ho visto "rU", "run", "run:" e "rU:". Questo sia per quanto riguarda il turbo in questione sia (talvolta, ma non sempre) per il turbo202.

Citazione
Ma la @ appariva sempre alla stessa riga. In versioni successive, il programma veniva lanciato con una JMP in Assembler, perciò queste versioni del loader erano immuni al problema.
Infatti compariva solo il ready. ma non compariva il run. Non è che non si aveva il tempo per leggerlo, non compariva proprio. In quel momento fallì il trucchetto di riempire lo schermo di schifezze (tipicamente "fori=1024to2023:pokei,0:next") per ritrovarsi con il cursore e fare quanto più comodo.

Un'altra caratteristica del connection (qui per connection intendo quello chiamato "connection 2" dal programma di cui sopra) diversa dal turbo202 era il tasto restore.
Quando premuto (anche da solo senza il run/stop) riavviava il C64.
Nel Turbo202 nel migliore dei casi il caricamento si piantava o dava effetti strani tipo le righe solo in parte dello schermo, ma il C64 non si riavviava. Se premuto col run/stop provocava per un attimo la scritta READY. in alto (come in condizioni normali) e poi il caricamento che continuava, o meglio continuava la routine di loader ma il caricamento ormai era andato a "donnine di facili costumi".
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Datasette Che Si Inchioda
« Risposta #16 il: 08 Luglio 2006, 21:31:10 »
 
Citazione da: "Massi cadenti"
Perfetto, ecco degli esempi.
Sono entrambi Galadriel, qualche nop qua qualche nop la'. il codice e' leggermente modificato ma sono la stessa cosa. Ecco alcuni stralci da 3 tipi diversi di hack dello stesso loader, nel punto in cui effettua il "run"
Codice: [Seleziona]
Filename: galadriel swc-2.prg

02BA  FA        nop
02BB  03 A0     slo ($A0,X)
02BD  E1 AD     SBC ($AD,X)
02BF  05 03     ORA $03
02C1  85 26     STA $26
02C3  AD 0C 03  LDA $030C
02C6  85 63     STA $63
02C8  AD 13 03  LDA $0313
02CB  85 62     STA $62
02CD  AD 17 03  LDA $0317
02D0  85 27     STA $27
02D2  AD 20 D0  LDA $D020
02D5  48        PHA
02D6  20 61 03  JSR $0361
02D9  A0 1F     LDY #$1F
02DB  B9 30 FD  LDA $FD30,Y
02DE  99 14 03  STA $0314,Y
02E1  88        DEY
02E2  10 F7     BPL $02DB

02E4  20 53 E4  JSR $E453
02E7  68        PLA
02E8  8D 20 D0  STA $D020
02EB  A6 26     LDX $26
02ED  A4 27     LDY $27
02EF  86 AE     STX $AE
02F1  84 AF     STY $AF
02F3  86 2D     STX $2D
02F5  84 2E     STY $2E
02F7  20 60 A6  JSR $A660
02FA  20 8E A6  JSR $A68E
02FD  4C AE A7  JMP $A7AE

0300  BE 02 BE  LDX $BE02,Y

Codice: [Seleziona]
Filename: turbo202
Loading address: $02ba

02BA  FA        nop
02BB  03 A0     slo ($A0,X)
02BD  E1 AD     SBC ($AD,X)
02BF  05 03     ORA $03
02C1  85 26     STA $26
02C3  AD 0C 03  LDA $030C
02C6  85 63     STA $63
02C8  AD 13 03  LDA $0313
02CB  85 62     STA $62
02CD  AD 17 03  LDA $0317
02D0  85 27     STA $27
02D2  20 61 03  JSR $0361
02D5  20 15 FD  JSR $FD15
02D8  20 53 E4  JSR $E453
02DB  A6 62     LDX $62
02DD  A4 63     LDY $63
02DF  86 2D     STX $2D
02E1  84 2E     STY $2E
02E3  EA        NOP
02E4  EA        NOP
02E5  EA        NOP
02E6  EA        NOP
02E7  EA        NOP
02E8  EA        NOP
02E9  EA        NOP
02EA  EA        NOP
02EB  EA        NOP
02EC  A2 03     LDX #$03
02EE  BD BA 02  LDA $02BA,X
02F1  48        PHA
02F2  CA        DEX
02F3  10 F9     BPL $02EE

02F5  A2 48     LDX #$48
02F7  A9 00     LDA #$00
02F9  9D B0 02  STA $02B0,X
02FC  CA        DEX
02FD  10 FA     BPL $02F9

02FF  60        RTS

0300  BE 02 BE  LDX $BE02,Y

Codice: [Seleziona]
Filename: biturbo by sc 85-2.prg
Loading address: $02BA

02BA  FA        nop
02BB  03 A0     slo ($A0,X)
02BD  E1 AD     SBC ($AD,X)
02BF  05 03     ORA $03
02C1  85 26     STA $26
02C3  AD 0C 03  LDA $030C
02C6  85 63     STA $63
02C8  AD 13 03  LDA $0313
02CB  85 62     STA $62
02CD  AD 17 03  LDA $0317
02D0  85 27     STA $27
02D2  20 61 03  JSR $0361
02D5  A0 1F     LDY #$1F
02D7  B9 30 FD  LDA $FD30,Y
02DA  99 14 03  STA $0314,Y
02DD  88        DEY
02DE  10 F7     BPL $02D7

02E0  20 53 E4  JSR $E453
02E3  EA        NOP
02E4  A2 03     LDX #$03
02E6  BD BA 02  LDA $02BA,X
02E9  48        PHA
02EA  CA        DEX
02EB  10 F9     BPL $02E6

02ED  A2 40     LDX #$40
02EF  A9 00     LDA #$00
02F1  9D B0 02  STA $02B0,X
02F4  CA        DEX
02F5  10 FA     BPL $02F1

02F7  A6 26     LDX $26
02F9  A4 27     LDY $27
02FB  86 AE     STX $AE
02FD  84 AF     STY $AF
02FF  60        RTS

0300  BE 02 BE  LDX $BE02,Y

nel turbo 202 ad esempio usa una JSR $fd15 che e' la routine in kernal che fa il trasferimento dei vettori a $314, negli altri 2 lo fa a manina...
Nel galadriel vediamo che fa 2 jsr e una jmp per fare il run da asm, negli altri 2 pusha invece nello stack le locazioni (piu' o meno le stesse fatte in modo esplicito dal galadriel) che verranno eseguite dalla rts.
Il resto e' pressoche' invariato.

La chiocciola @ appare sempre in tutti e 3 i loaders a $0690, ogni tanto ci scrive qualcosa, alla fine rimane a 0 (@, come screencode)
e non a posizioni variabili, anche scrivendo il LOAD in posizioni diverse prima di caricare =)

Seguendo passo passo mi sono accorto che viene eseguita (imho per errore) un istruzione illegale nel kernal che scrive a $0690  perche' un RTI ritorna alla locazione sbagliata, il puntatore del vettore di STOP $0328 punta un byte troppo avanti rispetto a dove dovrebbe. Il voler far inibire il runstop/restore con un valore "sbagliato" (molto meglio farlo puntare ad un RTS, ad esempio mettendo $EC) ha causato questa fantomatica @
Codice: [Seleziona]
** Monitor 160 016
.C:fec0   68         PLA
(C:$fec0)

** Monitor 160 020
.C:fec1   40         RTI
(C:$fec1)

** Monitor 160 026
.C:f6b1   A0 E9      LDY #$E9
(C:$f6b1)

** Monitor 160 028
.C:f6b3   4F 90 06   SRE $0690
(C:$f6b3)

SRE = LSR memory, EOR memory
viene shiftato ogni volta, infatti da $20 passa a $10, $8 etc fino a rimanere 0.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Wildwolf90

  • Utente
  • **
  • Post: 52
  • Gioco Preferito: Zak McKracken
Datasette Che Si Inchioda
« Risposta #17 il: 08 Luglio 2006, 22:16:03 »
 
Citazione
Anche questa smentita dalla mia esperienza.
A volte m'è capitato addirittura che la chiocciola comparisse nella stessa riga dove veniva il run, provocando un bel syntax error e le mie risate alla faccia di chi aveva fatto quell'autostart.)

A me capita che la chiocciola, in una cassetta, si posizioni moooolte righe più giu rispetto il run, bloccando il caricamento!
Guru Meditation...

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Datasette Che Si Inchioda
« Risposta #18 il: 08 Luglio 2006, 22:27:22 »
Citazione da: "Wildwolf90"
A me capita che la chiocciola, in una cassetta, si posizioni moooolte righe più giu rispetto il run, bloccando il caricamento!
cita magari anche quale cassetta e quale titolo, se no non possiamo controllare.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Datasette Che Si Inchioda
« Risposta #19 il: 09 Luglio 2006, 00:25:44 »
 
Citazione da: "Massi cadenti"
Citazione
Ci possono essere diverse varianti di loader, cioè codice scritto diversaamente, che riconoscono lo stesso formato sulla cassetta. Esempi erano il Turbo Tape 64 di Stefan Senz e il caricatore Turbo Tape 64-compatibile di Videobasic (quello di "PREMI LA BARRA SPAZIATRICE"): codice diverso (anche se sicuramente uno originato dall'altro), stesso formato.
Stai scherzando, vero?
No

Citazione
Forse davvero non te ne sei mai accorto, ma il "PREMI LA BARRA SPAZIATRICE" è scritto tramite un PRINT prima del caricamento in turbo
Me n'ero accorto le prime volte che usavo Video Basic, circa 20 anni fa. E comunque niente di quello che ho scritto è in contraddizione con quello che hai scritto tu.

Il punto del discorso era che uno stesso formato può essere caricato da loader diversi (nel qual caso i due loader sono compatibili). E i loader di Senz e di Video Basic hanno indubbiamente la parte Basic diversa. Comunque, stimolato dal tuo post, ho confrontato i due loader, e effettivamente la parte non Basic è quasi completamente uguale: ci sono 1076 byte uguali, e la parte dopo la fine del listato (i 3 byte $00) è lunga 1081 byte in Turbo Tape 64 e 1079 byte in quello di Video Basic. I due listati, sebbene diversi, hanno la stesa identica lunghezza.

Quindi meglio ricorrere a un altro esempio: http://www.edicolac64.com/public/scaricaca...etta=game2000n1 . Il loader è breve (592 byte), non c'è neanche l'ombra di <-L, ma il formato del gioco è esattamente Turbo Tape 64. Invece di <-L, scrivi RUN, non si ferma al FOUND del gioco turbo, ma il formato è identico.

Citazione
Citazione
Forse, ritrovare la rivista specializzata (o quant'altro) in cui appariva la definizione "Connection" può aiutare a dirimere la questione.
Tanto per dirne uno, "UNIVERSAL TAPE" delle edizioni APE
Interessante! Edicola 64 non ce l'ha. Non he che hai i .TAP?
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Datasette Che Si Inchioda
« Risposta #20 il: 09 Luglio 2006, 01:00:41 »
Citazione da: "fab"
Interessante! Edicola 64 non ce l'ha. Non he che hai i .TAP?
Ti ho uppato quel universal tape e un paio di connection che ho.
http://iancoog.altervista.org/hid/variconnection.rar
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Datasette Che Si Inchioda
« Risposta #21 il: 09 Luglio 2006, 01:09:08 »
Citazione da: "iAN CooG/HF"
viene eseguita (imho per errore) un istruzione illegale nel kernal che scrive a $0690  perche' un RTI ritorna alla locazione sbagliata, il puntatore del vettore di STOP $0328 punta un byte troppo avanti rispetto a dove dovrebbe. Il voler far inibire il runstop/restore con un valore "sbagliato" (molto meglio farlo puntare ad un RTS, ad esempio mettendo $EC) ha causato questa fantomatica @
 
Quindi, la caratteristica più famosa di questo loader è dovuta a un bug!

E non è il solo. Il loader calcola la checksum XOR di tutti i byte, carica il byte di checksum da cassetta, ma non li confronta. Quindi non è capace di rilevare errori di caricamento.

Per ingannare l'autostart fatto con rU o simili, avevo ideato questo trucchetto:
- POKE 650,128
- LOAD
- appena iniziato il caricamento del programma turbo, premere e tenere premuto RUN STOP

il RUN veniva interrotto dal RUN STOP prima di essere eseguito.

In http://www.edicolac64.com/public/scaricaca...assetta=peekn14 le introduzioni dei giochi sono in una versione di Connection interessante. L'indirizzo di inizio del caricamento, invece di essere "hard coded", è preso da $2B-$2C (inizio del Basic), invece quello finale è "hard coded" come sempre. Risultato: se l'inizio del Basic non è il tradizionale $801 ma è spostato in avanti, vengono caricati meno bytes del dovuto, e la parte in Assembler non è dove la SYS si aspetta che sia. Un'idea brillante. I giochi veri e propri sono in una versione di Turbo202 senza righe.
 
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Datasette Che Si Inchioda
« Risposta #22 il: 09 Luglio 2006, 01:13:43 »
Citazione da: "iAN CooG/HF"
Ti ho uppato quel universal tape e un paio di connection che ho.
http://iancoog.altervista.org/hid/variconnection.rar
La versione in connection.rar "CONNECTION.prg" di 2050 bytes, fa l'autostart con il r+Shift U
Codice: [Seleziona]
0D35  20 15 FD  JSR $FD15
0D38  20 53 E4  JSR $E453
0D3B  20 33 A5  JSR $A533
0D3E  A5 62     LDA $62
0D40  A6 63     LDX $63
0D42  85 2D     STA $2D
0D44  86 2E     STX $2E
0D46  A9 52     LDA #$52
0D48  8D 77 02  STA $0277
0D4B  A9 D5     LDA #$D5
0D4D  8D 78 02  STA $0278
0D50  A9 0D     LDA #$0D
0D52  8D 79 02  STA $0279
0D55  A9 03     LDA #$03
0D57  85 C6     STA $C6
0D59  4C 74 A4  JMP $A474
E nell'header segna "GALADRIEL SW. C."
 
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -