CollapseOS

oggi ho fatto portare da Claude CollapseOS su CPC, sia in versione DSK che per M4 Board…

è al 100% testuale e include compilatori e editor integrati per assembly e Forth…

la versione usa ancora il firmware del CPC

COLLAPS.ZIP (66.2 KB)

COLLAPS.DSK (190.3 KB)


Amstrad CPC

Collapse OS (release 2021-04-21, Forth) su Amstrad CPC 464 (con DDI-1),
664 e 6128. Si avvia da floppy (AMSDOS) o dalla scheda SD di una scheda M4,
e mantiene i propri blocchi in normali file AMSDOS, quindi lo stesso codice funziona su entrambi.

File

Tutti i nomi visualizzati dal CPC sono in formato 8.3 o più corti (AMSDOS e la scheda M4
gestiscono solo nomi 8.3, cartelle incluse). Il programma si chiama COLLAPS.

make genera:

  • os.bin: il kernel raw, compilato per essere eseguito a 0x0400.
  • COLLAPS.BIN: lo stesso file con intestazione AMSDOS.
  • COLLAPS.BAS: loader BASIC (ASCII). Esegue il POKE di uno stub di avvio di 41 byte
    (boot.fs) a 0x9000 e lo chiama con CALL. Lo stub carica COLLAPS.BIN a
    0x0400 tramite CAS IN OPEN/DIRECT e vi salta sopra.
  • blkgroups/Bnnn.BLK: il blkfs suddiviso in file AMSDOS da 8K. B208.BLK
    contiene i blocchi 208-215. I gruppi vuoti non vengono scritti.
  • COLLAPS.DSK: disco AMSDOS DATA da 40 tracce, formato Extended DSK. Contiene
    il loader, il kernel e i gruppi utili su CPC: 0-23 (assemblatori),
    96-119 (editor di blocchi, VE), 200-239 (xcomp, core), 280-303 (sorgente
    kernel Z80) e 368-375 (driver CPC). Rimangono circa 35K liberi.
  • COLLAPS.ZIP: tutto il necessario per una scheda SD per M4, nella root del file zip:
    loader, kernel e tutti i gruppi non vuoti.

Esecuzione

Floppy (oppure Gotek/HxC con COLLAPS.DSK):

RUN"COLLAPS

M4: estrai COLLAPS.ZIP in una cartella con un nome di massimo 8 caratteri
(ad es. COLLAPS) sulla scheda SD, poi digita

|CD,"COLLAPS"
RUN"COLLAPS

Non usare RUN"COLLAPS.BIN": l’avvio di un binario da BASIC resetta il
firmware. Le ROM in background (AMSDOS, M4) vengono disconnesse e l’I/O a blocchi
ricade sul registratore a cassette (verificato: «Press PLAY then any key:»). Il loader
utilizza chiamate in stile LOAD che le mantengono attive.

Il loader si rifiuta di avviarsi se HIMEM si trova al di sotto di &9FFF. Ciò si verifica quando
altre ROM hanno allocato troppa memoria, andando a sovrapporsi agli stack di Collapse OS.

Primi passi

Le parole di Collapse OS prendono i loro argomenti dallo stack, prima della parola stessa:

0 LIST          elenca il blocco 0 (l'indice master)
LIST            -> "stack underflow": LIST ha bisogno del numero di blocco
100 LIST        sorgente dell'editor di blocchi
110 LOAD  VE    carica e avvia il Visual Editor (q per uscire)
5 LOAD          carica l'assemblatore Z80
2 3 + .         stampa 5

Design: il firmware resta residente

Come per la configurazione TRS-80, questo port utilizza il firmware integrato della macchina per l’I/O.
Non tocca mai la modalità o il vettore di interrupt.

  • (emit) → TXT OUTPUT (0xbb5a), modalità schermo 2 (80x25).
  • (key?) → KM READ CHAR (0xbb09). I caratteri >= 0x80 (tasti cursore,
    COPY, …) vengono ignorati. Il meccanismo di break di ESC viene disabilitato.
  • AT-XY → TXT SET CURSOR (0xbb75). COLS LINES CELL! XYMODE permettono
    il corretto funzionamento del Visual Editor (110 LOAD poi VE).
  • BYE resetta la macchina.

Parole aggiuntive:

  • FW ( af bc de hl addr -- af bc de hl ) chiama qualsiasi routine del firmware. A
    è il MSB di af, il carry è il bit 0 del registro af restituito. Esempio: 0x0700 0 0 0 0xbb5a FW 2DROP 2DROP emette un segnale acustico.
  • FW0 ( addr -- ) chiama una routine senza argomenti.
  • MODE ( n -- ) imposta la modalità schermo (COLS rimane a 80; VE richiede la modalità 2).
  • CMOVE ( src dst u -- ) copia memoria tramite LDIR.

La regola dei registri ombra

L’interrupt handler del firmware CPC (0x0038: jp 0xb941) inizia con
di / ex af,af' / jr c,... / exx / ... out (c),c. Mantiene il suo flag
di rientranza in AF’ e la porta del Gate Array in BC’. Il codice che esegue EXX o
EX AF,AF' con gli interrupt abilitati manda in crash la macchina al successivo
interrupt.

Il kernel Z80 usa EXX, (FIND, *, /MOD, []=, CRC16) e EXAFAF',
(CARRY? e + - *). Il blocco 370, caricato tra l’assemblatore e
B280, ridefinisce queste due parole di assemblaggio. EXX, scambia DE con un’area di RAM,
e EXAFAF', scambia AF con un’area di RAM. Il kernel usa EXX solo per
proteggere DE (IP) ed EX AF,AF’ per conservare il riporto (carry), quindi il comportamento è
identico. I blocchi a monte rimangono invariati.

Se assembli il tuo codice direttamente sul CPC (5 LOAD), non utilizzare EXX, o
EXAFAF', a meno che tu non abbia caricato prima le relative ridefinizioni:
0x9ba0 CONSTANT DRVMEM 370 LOAD.

Blocchi: file di gruppo AMSDOS

AMSDOS non supporta l’accesso casuale, quindi i blocchi sono raggruppati a gruppi di 8 in file da 8K,
letti e scritti per intero con CAS IN/OUT DIRECT. Due gruppi vengono memorizzati nella cache RAM
tramite LRU, così i LOAD annidati che saltano tra un blocco genitore e i relativi
figli non costringono a rileggere il disco. La scrittura di un blocco riscrive l’intero file di gruppo
(write-through). AMSDOS rinomina quindi il vecchio file in .BAK, e il driver
provvede subito a cancellare tale file .BAK tramite |ERA (KL FIND COMMAND + KL FAR PCHL).
In caso contrario, ogni gruppo modificato lascerebbe indietro 9K e il disco finirebbe per riempirsi.

Un blocco appartenente a un gruppo privo di file viene letto come vuoto. In questo caso
AMSDOS visualizza il messaggio Bnnn.BLK not found: viene mostrato sempre,
senza alcun flag per disabilitarlo (verificato nella ROM di AMSDOS: CEC4 jp nc,D50C -> ld a,6 -> print). La prima scrittura crea il file.

I file di gruppo contengono un’intestazione AMSDOS. I file senza intestazione non possono essere letti con
CAS IN DIRECT (testato), pertanto ogni gruppo da 8K occupa 9K su disco.

Mappa della memoria

0x0000-0x03ff  restart del firmware, BASIC (inutilizzati una volta in esecuzione)
0x0400         kernel (~7K), poi buffer BLK( e il dizionario
0x5300-0x5aff  CASBUF, buffer AMSDOS da 2K
0x5b00-0x9aff  GRPBUF, due slot di gruppo da 8K
0x9b00-0x9bff  SYSVARS, DRVMEM
0x9c00         RS (cresce verso l'alto)
0x9ffe         PS (cresce verso il basso)
0xa000-        firmware, AMSDOS, workspace M4

Il dizionario ha a disposizione circa 12K: l’assemblatore Z80 occupa ~2.9K, gli editor
~2.5K. I buffer passati al firmware e gli stack devono trovarsi nell’intervallo
0x4000-0xbfff. Mentre il firmware è in esecuzione (inclusi i suoi interrupt), esegue il paging
della ROM sul resto della memoria.

Velocità

Il caricamento del sorgente è limitato dalla CPU (CPU bound): Collapse OS cerca ogni parola eseguendo una
ricerca lineare nel dizionario. Su un CPC l’elaborazione di un blocco richiede 1-2 secondi, quindi 110 LOAD (VE)
impiega circa 70 secondi e 5 LOAD (assembler) circa un minuto (misurato in
MAME). La lettura o la scrittura di un gruppo richiede qualche secondo su floppy. Durante
il trasferimento dei settori da parte di AMSDOS, gli interrupt sono disattivati e il firmware non scansiona
la tastiera, quindi i tasti premuti durante l’attività del disco potrebbero non essere rilevati.

Verificato in MAME 0.264 (cpc6128 e cpc464 + DDI-1)

  • Avvio da DSK con RUN"COLLAPS, schermata iniziale (banner), interprete.
  • LIST dai file di gruppo; un gruppo mancante viene letto come vuoto.
  • COPY scrive i blocchi: vengono creati nuovi file di gruppo e riscritti quelli
    esistenti. La rilettura a seguito dell’evizione dalla cache è corretta e non rimangono
    file .BAK orfani (verificato con CAT).
  • 110 LOAD + VE: il Visual Editor esegue il rendering e consente la modifica, q per uscire.
  • 5 LOAD, LIVETGT, una parola CODE assemblata ed eseguita su CPC
    (3 X7 . → 10), e FW che chiama TXT OUTPUT.
  • Ciclo di modifica con VE: scrittura all’interno di un blocco vuoto, q, FLUSH, svuotamento della cache,
    LIST mostra il testo riletto correttamente da disco.
  • Su 464 + DDI-1: avvio, LIST, COPY.

La scheda M4 non può essere emulata in questo contesto. Applica le patch agli stessi
vettori AMSDOS/CAS utilizzati da questo porting, ma tale componente non è stato testato su hardware M4 reale.

5 Mi Piace

Domanda molto stupida, immagino, ma a cosa serve?

è un ambiente di sviluppo multipiattaforma completo…

«L’inverno sta arrivando e Collapse OS mira ad ammorbidire il colpo. Si tratta di un sistema operativo Forth (perché Forth?) e di una raccolta di strumenti e documentazione con un unico scopo: preservare la capacità di programmare microcontrollori durante un collasso della civiltà. È progettato per:

  1. Funzionare su macchine minime e improvvisate.
  2. Interfacciarsi attraverso mezzi improvvisati (seriale, tastiera, display).
  3. Modificare contenuti testuali e binari.
  4. Compilare sorgenti assembly per un’ampia gamma di MCU e CPU.
  5. Leggere e scrivere su un’ampia gamma di dispositivi di archiviazione.
  6. Auto-assemblarsi e distribuirsi su un’altra macchina.»

è pensato principalmente per costruire un sistema da parti di scarto dopo il collasso della civiltà… ma può essere usato ancora oggi, ha compilatori, driver e strumenti per CPU z80, 6809 e 8086, e MCU basati su AVR

1 Mi Piace

ok grazie per la risposta