Invasion, Cyborg Hellgate e anche supporto per V9990!

Ciao a tutti,

sono felice che il mio clone di Defender, Invasion, sia stato accolto bene in generale. Vorrei realizzare delle versioni fisiche: sapreste consigliarmi qualche posto?

Ho già pronti: ZX Spectrum Next, Sega Genesis/Megadrive, Amstrad CPC (con e senza v9990), MSX (con v9990).

Il CPC riesce a gestire Hellgate? Sorprendentemente bene: è stato ridotto (è stato rimosso un solo nemico) e gira su macchine da 128kb. Non credo ci sia nulla di simile su CPC e beh, il v9990 è tutta un’altra storia: è bello quanto la versione Megadrive!

Julian

2 Mi Piace

per usare la V9990, il gioco girerà su Symbos?

CYBORG HELLGATE - LE VERSIONI, SOTTO IL PROFILO TECNICO

Cyborg Hellgate è uno sparatutto bullet hell in stile Defender: un pianeta a scorrimento, uno scanner, umanoidi
da salvare e un vasto cast: lander, mutanti, baiter, bombardieri, pod, swarmer, fireflinger,
dunderhead, pesci rossi Yellowbelly, Fudd e Big Dud; oltre ai potenziamenti di MECHRA, al warp HELLGATE,
a Ghosto, alla guardia, alle catene HIT e ai mech giganti.

Ogni versione è scritta in NTC BASIC, compilata in codice threaded nativo, con le parti più critiche per la
velocità in Z80 o 68000. La logica di gioco è lo stesso codice BASIC su tutte le piattaforme; ciò che cambia è il modo in cui ciascuna
macchina la renderizza a schermo.

A SCHERMO CONTEMPORANEAMENTE (I LIMITI DEL GIOCO, IDENTICI IN OGNI VERSIONE)

  • Nemici: fino a 16 contemporaneamente (4 insieme ai mech nei livelli boss).
  • Umanoidi: 8.
  • Mech giganti: fino a 5, ciascuno di 64 x 48 (12 sprite sul Next).
  • Esplosioni: 6. Collezionabili (P, P grande, gemme): 6.
  • La navicella.
  • Proiettili nemici: fino a 52.
  • Colpi laser: fino a 22 (16 raffiche laser sul Mega Drive, ciascuna da uno a tre raggi).
  • Ovvero fino a circa 110 elementi in movimento contemporaneamente, stelle escluse.

ZX SPECTRUM NEXT (L’ORIGINALE)

  • Z80N a 28 MHz, 50 fotogrammi al secondo.
  • Layer 2 per il terreno, il copper per lo scorrimento, la tilemap per il pannello e i testi.
  • Sprite hardware per ogni elemento in movimento. I mech giganti sono 64 x 48, composti da 12 sprite:
    è memorizzata solo la metà sinistra, la metà destra è costituita dagli stessi sprite specchiati.
  • Movimento, collisioni e rendering di proiettili e laser gestiti in Z80: 52 proiettili nemici e 22 colpi laser sotto forma di
    sprite hardware.
  • I dati degli sprite e dei font risiedono nei banchi NEX 45-47, all’esterno della memoria del programma.
  • A schermo: 128 sprite hardware — slot 0-53 per la navicella, i nemici, gli umanoidi, le esplosioni,
    i collezionabili e i mech; 54-127 per i 52 proiettili e i 22 colpi — e 60 stelle sul Layer 2.
  • Versione con voce (CYBHELLV): 25 battute con vocoder a 13,6 kHz, inviate dal DMA del Next direttamente al
    DAC, riducendo al minimo il carico sullo Z80. Richiede un Next da 1 MB.

SEGA MEGA DRIVE / GENESIS

  • 68000 a 7,6 MHz, H40 (320 x 224), NTSC a 60 Hz o PAL a 50 Hz.
  • Ogni operazione eseguita per ciascun oggetto a ogni frame è in 68000: il tick per tutti i 14 tipi di nemici e
    gli umanoidi, i collezionabili, il controller, la navicella e la visuale, i 52 colpi nemici e le 16 raffiche
    laser, la tabella degli sprite, lo scanner, le colonne del paesaggio. Il BASIC determina cosa compare a schermo,
    il punteggio di ciascuna uccisione e i testi.
  • Piano B: le stelle, con scorrimento a un quarto della velocità del terreno (l’effetto parallasse del Next), e lo
    scanner. Piano A: i testi, il pannello e il terreno. Tutto ciò che si muove è uno sprite
    hardware. La tabella degli sprite, lo scanner e le nuove colonne del paesaggio vengono trasferiti al VDP via DMA durante il
    blank verticale.
  • Il tick di gioco è fissato a 50 al secondo come sul Next, sia su NTSC che su PAL (1.500 tick in 1.800 frame NTSC,
    1.500 in 1.500 PAL); lo scorrimento risulta fluido anche a 60 Hz.
  • A schermo: il Mega Drive visualizza 80 sprite hardware, 20 per linea (contro i 128 del Next), ripartiti tra la
    navicella, i 16 nemici, gli 8 umanoidi, i mech, le esplosioni, i collezionabili, i 52 colpi nemici e le 16 raffiche
    laser; il superamento del limite per linea si è verificato in meno dell’1% dei frame testati. Le stelle sono tile sul
    piano B, pertanto non occupano sprite.
  • Effetti sonori sul PSG, con conversione di ogni periodo AY. Versione con voce (CYBHELLV): le battute con vocoder
    del Next riprodotte tramite il DAC dell’YM2612 da un player Z80, che non impegna il bus del 68000 durante il DMA.
  • ROM da 74K, 612K con la voce.
  • Controller a 3 e 6 pulsanti.
  • Cinque livelli di difficoltà (Sinistra / Destra nella schermata del titolo): EASY con una vita extra ogni 10.000 punti, MEDIUM
    ogni 50.000, HARD ogni 100.000, VERY HARD ogni 100.000 senza navicelle extra, INSANE identico ma
    partendo con una sola navicella.
  • Testato tramite bot fino all’ondata 25 e oltre su Genesis Plus GX.

AMSTRAD CPC (VERSIONE COMPLETA)

  • Z80 a 4 MHz, modalità 0, schermi in double buffering a #C000 e #0000. Nessun hardware per gli sprite: tutto
    è gestito via software.
  • Sprite compilati: ciascuno sprite è una routine in Z80 che scrive i propri byte direttamente sullo schermo,
    sia in versione normale che specchiata. 118 pattern, circa 49K di codice, memorizzati nella RAM aggiuntiva del 6128; il resto del
    programma si trova nel banco 7.
  • Liste di cancellazione (erase lists): vengono anneriti esclusivamente i byte effettivamente disegnati. Il terreno e le stelle mantengono
    le proprie liste dedicate.
  • Clock dei fotogrammi gestito da un interrupt IM 2 generato dai 300 Hz del gate array, con una tabella vettoriale da 257 byte per
    garantire il funzionamento sulle macchine espanse in cui il bus non restituisce #FF.
  • A schermo: 57 slot per sprite software (la navicella, i nemici, gli umanoidi, le esplosioni, i collezionabili e le
    12 celle di un mech), fino a 52 proiettili nemici e 22 colpi laser come piccoli elementi grafici dotati di proprie liste di cancellazione,
    e 24 stelle.
  • Bloccato a un fotogramma ogni due: 25 fps al ritmo in tempo reale del Next, con spostamenti raddoppiati. Nelle ondate più
    concitate scende a 16-19 fps.
  • Richiede 128K (un 6128, oppure un 464 / 664 con 64K aggiuntivi).

AMSTRAD CPC LITE

Stesso engine, ottimizzato per garantire una resa fluida:

  • Terreno a punti: ogni ottava colonna del mondo, ancorata allo scenario durante lo scorrimento.
  • Niente stelle né scanner.
  • Il pannello è visibile solo tenendo premuto TAB. La linea viola rimane a schermo, consentendo di visualizzare l’altitudine
    raggiunta dai lander.
  • Sprite compilati senza maschera (byte dei bordi scritti direttamente): le dimensioni del codice degli sprite scendono a 27,6K suddivisi in due
    banchi.
  • L’avanzamento delle righe degli sprite sfrutta pop bc / add hl, bc da tabelle per riga, evitando un ciclo di add-and-check per
    ogni riga.
  • Alieni dormienti: qualsiasi elemento situato a più di 240 pixel di mondo dall’inquadratura si arresta del tutto, timer compresi,
    finché non ci si avvicina in volo. L’assenza dello scanner non permette di accorgersene. I lander che trasportano umanoidi, gli umanoidi in caduta,
    gli inseguitori e i mech rimangono sempre attivi.
  • Nessun dunderhead: la loro velocità è eccessiva per essere visualizzata in modo fluido dal CPC.
  • A schermo: gli stessi 57 slot sprite, 52 proiettili e 22 colpi laser della versione completa, niente
    stelle; con la disattivazione dei nemici distanti, solo gli alieni vicini all’inquadratura sono effettivamente in movimento.
  • Per lo più a 25 fps, con lievi cali sporadici nelle ondate più dense. 128K.

AMSTRAD CPC + V9990 (AMSDAP CON UN MSX GFX9000 O VIDEO9000, O UNA POWERGRAPH)

  • Il CPC gestisce la logica di gioco; il V9990 si occupa del rendering in modalità P1: due livelli di tile
    a scorrimento hardware e 125 sprite hardware (16 x 16, 16 colori).
  • Terreno e stelle su un livello, pannello e scanner sull’altro. Tutti gli sprite sono
    hardware; i mech impiegano copie specchiate pre-renderizzate in memoria, poiché la modalità P1 non supporta il flipping.
  • A schermo: i 125 sprite hardware del V9990 (16 per linea) accolgono i 57 slot per gli oggetti del gioco
    oltre ai proiettili e ai colpi laser (fino a 52 e 22), con 60 stelle sul livello di sfondo.
  • In caso di oltre 16 sprite su una riga: l’ordine dei proiettili si inverte a ogni fotogramma, generando uno sfarfallio al posto della
    scomparsa dell’immagine.
  • Un fotogramma di anticipo: ogni frame completato viene messo in coda e mostrato al fotogramma successivo del V9990, consentendo a un fotogramma
    rapido di compensare il tempo di uno più lento. Il costo è un frame (40 ms) di latenza (lag).
  • La parte più impegnativa del BASIC è stata convertita in Z80: comandi, clock, punteggio, armi dei mech.
  • 25 fps nelle ondate 1-2 e nei livelli boss; il bullet hell dell’ondata 7 rimane a tempo nel 93% dei frame.
  • Più compatto rispetto alla versione per solo CPC (66K contro 87K): gli sprite sono dati a 4 bit salvati nella
    memoria della scheda, non codice compilato. Richiede 128K e la scheda all’indirizzo &FF60.

MSX2 + V9990 (GFX9000, VIDEO9000, POWERGRAPH)

  • Codice quasi identico alla versione CPC + V9990: il driver del V9990 non subisce variazioni; differiscono unicamente
    la gestione di tastiera, joystick, audio e memoria.
  • Due versioni ricavate da un unico sorgente: un file .COM per MSX-DOS 2 / Nextor con due file di dati (caricati nelle pagine
    del memory mapper, allo stesso modo in cui il CPC popola i suoi banchi), e una MegaROM ASCII16 da 128K compatibile con il bios libero
    C-BIOS.
  • Sonoro gestito tramite PSG (lo stesso chip AY del CPC), con intonazioni ricalibrate per il clock a 1,79 MHz dell’MSX.
  • A schermo: configurazione identica alla versione CPC + V9990 — 57 slot oggetto, 52 proiettili, 22 colpi laser,
    60 stelle.
  • Il V9990 opera costantemente a 50 Hz, assicurando la medesima cadenza di gioco sia su macchine MSX a 50 Hz che a 60 Hz.
  • Prestazioni vicine a quelle della combinazione CPC + V9990: l’ondata 1 rispetta i tempi nel 99% dei frame, l’ondata 7 nell’83%.

TESTING

  • Versioni CPC testate su Caprice32; CPC + V9990 su 1984 (l’emulatore CPC con supporto a PowerGraph V9990);
    la ROM per MSX su openMSX con l’estensione GFX9000; la versione Mega Drive su Genesis Plus GX.
  • Ogni elemento è stato collaudato anche tramite bot attraverso ondate, livelli con mech giganti e schermate di game over all’interno dei test
    harness proprietari di NTC dedicati al timing.
  • I dati numerici provengono da emulatori e ambienti di test, non da hardware reale.
  • blueMSX non dispone del supporto per V9990: per la versione MSX utilizzare openMSX o WebMSX.

(c) 2026 Cyborg Unicorn Pty Ltd

Se SymbOS può far girare la roba per CPC (prendendo il controllo della macchina), allora dovrebbe funzionare. Tuttavia, perderesti ciò che stai facendo in SymbOS.

Potrei realizzare una versione per SymbOS? Forse, ma non so bene come NTC BASIC coesisterà e interagirà direttamente con l’hardware («bang the hardware»), magari in modo cooperativo e «amichevole».

Dovrei procedere sotto la guida di Prodatron.

Versione Cyborg Hellgate CPC v9990:

Versione Cyborg Hellgate ZX Spectrum Next:

1 Mi Piace

Demo giocabili qui:

1 Mi Piace

Eccellente, questo è uno dei pochi giochi che funziona con la V9990 al di fuori dell’ecosistema di Symbos, proverò a registrare un video dalla macchina reale, saluti!!!

EDIT, non mi rileva la V9990, io ho il modello Amstrad Edition di Tecnobytes


e

Ho aggiunto un v9938 per gli utenti di AMSDAP: è sperimentale, ma mi piacerebbe sapere com’è andata.

Ne arriveranno altri! Tanti quanti dei miei giochi per ZX Spectrum Next riuscirò a convertire che non richiedano le specifiche di velocità della CPU dello ZX Spectrum Next.

Ce l’ho collegata anch’io all’AMSDAP

Però io ho la V9990 come ho detto sopra, sembra che su macchina reale non funzioni.

Ah, ho appena letto i tuoi appunti qui sopra: ti farò sapere. Ne ho anche uno originale Amstrad della Technobytes.

Hai della buona documentazione su come programmarlo su CPC? Non riesco a trovare nulla e sto andando a tentativi. Non mi riferisco al v9990 in sé.

V9938 a &FF88:

10 x=INP(&FF89)
20 OUT &FF89,0:OUT &FF89,&8E
30 OUT &FF89,0:OUT &FF89,&40:OUT &FF88,&5A:OUT &FF88,&A5
40 OUT &FF89,0:OUT &FF89,0:a=INP(&FF88):b=INP(&FF88)
50 PRINT HEX$(a),HEX$(b),HEX$(INP(&FF89))

V9990 a &FF60:

10 OUT &FF67,2:OUT &FF67,0
20 OUT &FF64,0:OUT &FF63,0:OUT &FF63,0:OUT &FF63,0:OUT &FF60,&5A:OUT &FF60,&A5
30 OUT &FF64,3:OUT &FF63,0:OUT &FF63,0:OUT &FF63,0:a=INP(&FF60):b=INP(&FF60)
40 PRINT HEX$(a),HEX$(b),HEX$(INP(&FF65))

Cosa significano i numeri:

  • 5A A5: la scheda funziona. Il problema è il test del loader: il latch, oppure l’indirizzo all’inizio della VRAM.
  • FF FF: nulla risponde a quella porta. Controlla l’adattatore, l’alimentazione o il reset.
  • Qualsiasi altra cosa: qualcosa risponde, o un’altra espansione che va in conflitto sulla porta oppure la scheda si trova in uno stato anomalo.
1 Mi Piace

Lo proverò.

Quel gioco mi ricorda un sacco Subterranean Stryker, con lo scanner in alto, la possibilità di volare in entrambe le direzioni e il fatto di raccogliere gli umani…

1 Mi Piace

Funziona già su CPC reale con la V9990 !!! Ottimo lavoro..

1 Mi Piace

Grazie a XeNoMoRPH per i test: a quanto pare la scheda deve essere inizializzata in un certo modo e ora NTC BASIC avrà il pieno supporto per v9990. Nessuna scusa per non farci altri giochi, per tutti quanti.

Ora sto ricompilando v9938 per vedere se c’era lo stesso problema.

1 Mi Piace

Cosa ne pensi, il gioco è troppo veloce? A me piace così — basta difensori lenti — ma potrei inserire un’impostazione per la velocità senza troppi problemi.

In effetti va velocissimo !!! , a proposito, adesso hai un altro fronte aperto: un amico l’ha provato su un vero MSX e sullo schermo gli compare questo , qui il problema sembra essere diverso rispetto al rilevamento della V9990

1 Mi Piace