Viele werden zustimmen, dass die aufkommende COVID-19-Pandemie das Leben der IT-Community ziemlich verdorben hat. Aber wir werden nicht über einen dunklen Streifen sprechen, sondern über eine andere Episode.Bereits im März wurde die berühmte Demoparty Forever 2020 abgesagt und später die Veranstaltung auf den Herbst verschoben. Lange vor der Absage habe ich mit den Organisatoren gesprochen. Sie lehnten es ab, eine meiner Arbeiten anzunehmen, und erklärten, dass es kein Apple II gab, und baten im Gegenzug um ein Video der Arbeit von einem echten Computer.Nun, ich konnte den Datensatz nicht erhalten, daher bemerkte ich die Liste der Plattformen:Amstrad CPC, Thomson, PMD-85, MSX, ZX81, Sam Coupe, alle Nicht-C = 64 8-Bit-Commodores oder jedes andere 8-Bit-SystemIch fühlte mich vom ZX81 angezogen, da ich bereits versuchte, den Computer zu lernen, aber abstürzte.Die Forschung verlief nach meinem üblichen Muster:Emulator
Ich entschied mich für EightyOneVersion 1.6.1. Die Version hat einen praktischen Debugger, aber das Programm emuliert kein anderes Modell - ZX80, später fand ich ein anderes Build 3.7.Kreuz bedeutet
Die Suche wurde zu FASM gebracht (ein Thema im Forum, das für die Plattform angepasst wurde. Die kompilierten Beispiele wurden jedoch nicht gestartet. Ich habe andere Assembler-Optionen ausprobiert - Pasmo und andere, aber immer noch kein Arbeitsprogramm kompiliert.Lange Suchen brachten ein Beispiel für das Drucken von Hallo, Welt!Nun, es stellte sich heraus! Jetzt ist die dritte Episode an der Reihe.Dokumentation
Ein Teil der Informationen wurde hier gefunden .Disassembler ROM hier.Speicherkarte:0000-1FFF - ROM
2000-3FFF - Shadow ROM. , Interface 1
4000-7FFF - 16
Ein Teil des Speichers ist für Systemvariablen reserviert .Ferner werden um 16509 das BASIC-Programm und seine Variablen gespeichert.Das Programm auf BASIC enthält das Format:2 big endian
2
...
1 ($76) -
Für eine Kassette sind nur BASIC-Programme möglich. Diese Methode wurde vorgeschlagen:1 REM ( )
2 RANDOMIZE USR(16514) - , REM
Sie sollten auf die Systemvariable D_FILE achten, die den Videospeicher angibt.Im angegebenen Beispiel wird dies wie folgt implementiert:D_FILE: defw display_file
display_file: defb _NL
defs 32
...
defs 32
defb _NL
Das erste Byte ist ein Zeichen für den Zeilenanfang, dann sind 32 Bytes Leerzeichen.Es stellte sich heraus, 24 Zeilen, die sperrig aussahen.Das erste Programm, das ich geschrieben habe:
;compile with sjasmplus
device zxspectrum128
p_start: org 0x4009
begin
VERSN: defb 0
E_PPC: defw 20 ; BASIC line number of line with cursor.
D_FILE: defw display_file2
DF_CC: defw display_file2+1
VARS: defw variables
DEST: defw 0
E_LINE: defw edit_line
CH_ADD: defw p_end-1
X_PTR: defw 0
STKBOT: defw p_end
STKEND: defw p_end
BERG: defb 0
MEM: defw MEMBOT
SPARE1: defb 0
DF_SZ: defb 2 ; Number of lines in lower part of screen.
S_TOP: defw 10 ; BASIC line number of line at top of screen.
LAST_K: defw 0xffff
DB_ST: defb 0
MARGIN: defb 55 ; Blank lines above/below TV picture: US = 31, UK = 55.
NXTLIN: defw display_file ; Memory address of next program line to be executed.
OLDPPC: defw 0
FLAGX: defb 0
STRLEN: defw 0
T_ADDR: defw 0x0c8d
SEED: defw 0
FRAMES: defw 0 ; Updated once for every TV frame displayed.
COORDS: defw 0
PR_CC: defb 0xbc
S_POSN: defb 0x21,0x18
CDFLAG: defb 0x40
PRBUF: defs 0x20
defb _NL
MEMBOT: defs 0x1e
SPARE2: defw 0
; Start of the BASIC area for user programs.
basic_0001: defb 0,1 ; 1 REM
defw basic_0010-basic_0001-4
defb _REM
; Start of user machine code program
mem_16514:
ld hl,p_end;display_file2
push hl
;cls
ld c,25
c1:
ld b,32
ld (hl),$76:inc hl
c2:
ld (hl),0:inc hl
djnz c2
dec c
jr nz,c1
pop hl
push hl
ld c,$0
ylp:
ld (hl),$76
inc hl
ld b,32
xlp:
ld (hl),c
inc hl
inc c
bit 6,c
jr nz,endp;ret nz
djnz xlp
jr ylp
endp:
pop hl
ld (D_FILE),hl
jr $
display_file2:
dup 25
defb _NL
edup
end
display /d,end-begin
savebin "prb.p",begin,end-begin
Eine verkürzte Version schlug dieses Thema vor .Ein Nachteil: Nach dem Laden des Programms wird das Endergebnis nicht angezeigt. Dies ist nicht überraschend, da die Zeilen leer sind. Das Lesen der Handbücher schlug eine weitere Änderung vor:NXTLIN: defw basic_0010 ;
Es stellte sich als so einfacher Trick heraus: Nach dem Laden müssen Sie nicht RUN eingeben, das Programm startet von selbst.Kurz gesagt, ich werde das Wesentliche des Programms beschreiben: Füllen Sie zuerst den Videospeicher gemäß dem Modell aus, wie es im Druckprogramm „Hallo Welt“ war, und füllen Sie dann die Zeilen mit Zeichen mit den Codes 00-63.
Bei der ersten Entwicklung habe ich einen Fehler gemacht und Zeichen mit den Codes 00-255 gefüllt, aber das Programm hat nicht funktioniert, da ein Teil der Codes nicht verwendet wird.Das Ergebnis der Forschung war die Arbeit von Kerr , die uninteressant erscheinen würde, aber für mich ist das Programm selbst eine großartige Leistung.Und vor der Demoparty wird viel Zeit für die Entwicklung eines Programms für die 1k-Nominierung aufgewendet.Bleibt ZX80.Es gibt eine andere Reihenfolge von Systemvariablen dafür.Software gespeichert ist hier .Deshalb habe ich das Programm eingegeben und im Debugger nachgesehen:
Hier gibt es eine leichte Einschränkung - 1 KB Speicher, daher müssen Sie sich überlegen, welches Programm Sie schreiben möchten.Vielleicht schreibe ich eines Tages.