Beaucoup conviendront que la pandémie émergente de COVID-19 a pratiquement gâché la vie de la communauté informatique. Mais nous ne parlerons pas d'une bande sombre, mais d'un autre épisode.Déjà en mars, la célèbre démopartie Forever 2020 a été annulée , puis l'événement a été reporté à l'automne. Bien avant l'annulation, j'ai parlé avec les organisateurs. Ils ont refusé d'accepter l'un de mes travaux, expliquant qu'il n'y avait pas d'Apple II, et ont demandé en retour une vidéo du travail à partir d'un véritable ordinateur.Eh bien, je n'ai pas pu obtenir le record, j'ai donc remarqué la liste des plates-formes:Amstrad CPC, Thomson, PMD-85, MSX, ZX81, Sam Coupe, tous les Commodores 8 bits non-C = 64 ou tout autre système 8 bitsJ'étais attiré par le ZX81, car j'essayais déjà d'apprendre l'ordinateur, mais je suis tombé en panne.La recherche s'est déroulée selon mon schéma habituel:Émulateur
J'ai choisi EightyOne apris la version 1.6.1. La version a un débogueur pratique, mais le programme n'émule pas un autre modèle - ZX80, plus tard j'ai trouvé une autre version 3.7.Croix signifie
La recherche a amené à FASM (un sujet sur le forum adapté à la plate-forme. Cependant, les exemples compilés n'ont pas démarré. J'ai essayé d'autres options d'assembleur - Pasmo et d'autres, mais je n'ai pas compilé un programme de travail. Delongues recherches ont apporté un exemple d'impression Bonjour, mon monde!, miracle! il s'est avéré! Maintenant, le tour est venu au troisième épisode.Documentation
Une partie des informations a été trouvée ici.ROM du démonteur ici.Carte mémoire:0000-1FFF - ROM
2000-3FFF - Shadow ROM. , Interface 1
4000-7FFF - 16
Une partie de la mémoire est réservée aux variables système .De plus, à 16 h 50, le programme BASIC et ses variables sont stockés.Le programme sur BASIC contient le format:2 big endian
2
...
1 ($76) -
Pour une cassette, seuls les programmes BASIC sont possibles; cette méthode a été proposée:1 REM ( )
2 RANDOMIZE USR(16514) - , REM
Vous devez faire attention à la variable système D_FILE, qui indique la mémoire vidéo.Dans l'exemple indiqué, ceci est implémenté comme suit:D_FILE: defw display_file
display_file: defb _NL
defs 32
...
defs 32
defb _NL
Le premier octet est un signe du début de la ligne, puis 32 octets sont des espaces.Il s'est avéré que 24 lignes étaient volumineuses.Le premier programme que j'ai écrit:
;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
Une version abrégée a suggéré ce sujet .Un inconvénient: après le chargement du programme, la ligne du bas ne s'affiche pas. Ce n'est pas surprenant, car les lignes sont vides. La lecture des manuels suggère un autre changement:NXTLIN: defw basic_0010 ;
Il s'est avéré une astuce si simple: après le chargement, vous n'avez pas besoin de taper RUN, le programme démarrera de lui-même.En bref, je décrirai l'essence du programme: remplir d'abord la mémoire vidéo selon le modèle, comme c'était le cas dans le programme d'impression «Bonjour, monde», puis remplir les lignes avec des caractères avec les codes 00-63.
Au premier développement, j'ai fait une erreur et j'ai écrit des caractères de remplissage avec les codes 00-255, mais le programme n'a pas fonctionné, car les codes ne sont pas utilisés.Le résultat de la recherche a été le travail de kerr , ce qui semble inintéressant, mais pour moi, le programme lui-même est une grande réussite.Et avant la démopartie, il y aura beaucoup de temps qui sera consacré à l'élaboration d'un programme dans la nomination 1k.Reste ZX80.Il y a un ordre différent de variables système pour cela.Le logiciel est stocké ici .Par conséquent, j'ai tapé le programme et regardé dans le débogueur:
Il y a une légère limitation ici - 1k de mémoire, donc vous devez penser au programme à écrire.J'écrirai peut-être un jour.